JavaScript中返回布尔值的字符串比较

9
在Javascript中有一个函数可以比较字符串并返回布尔值吗?我找到了.match函数,但它会返回匹配的字符串。我希望有其他函数可以更简单地比较字符串,因为我想检查一个字符串是否包含这个词并进行相应操作。谢谢。

你是在寻找一个精确的字符串1和字符串2的匹配,还是字符串1可能出现在较大字符串2的任意位置? - CrayonViolent
那是我的第一个解决方案,但我遇到了一个缺陷。Email == Friend Email会返回false。所以我在寻找类似于JavaScript的strcmp函数。 :) - magicianiam
8个回答

32
您可以使用正则表达式的test()方法,该方法返回一个布尔值:
/a/.test('abcd'); // returns true.

4
这是正确的答案。“test()方法执行正则表达式与指定字符串之间的匹配搜索。返回truefalse。”-- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test - Dem Pilafian

13

如果您需要经常使用此函数,可以使用扩充类型:

String.prototype.isMatch = function(s){
   return this.match(s)!==null 
}

所以你可以使用:

var myBool = "ali".isMatch("Ali");

一般看法认为,使用类型增强只是因为它可能与其他增强产生冲突而被不建议使用。

根据Javascript Patterns这本书的说法,应该限制其使用。

个人认为只要命名得当,例如:

String.prototype.mycompany_isMatch = function(s){
   return this.match(s)!==null 
}

这样做会使它看起来不美观,但是安全


太棒了!(可能有点过头了? :D) - ArtoAle
我以前没有见过这些东西。什么是ismatch?让我试试。谢谢。 - magicianiam
@magicianIam 如果你按照我所概述的方式将它添加到字符串原型中,它就能够正常工作。isMatch是我们添加到JavaScript框架中的内容,而不是内置函数。 - Aliostad
String 中没有 "isMatch" 方法。Aliostad 想要解释的是,您可以通过定义一个新函数并将其添加到其原型中来增强 JavaScript 对象的功能。 请查看 http://www.crockford.com/javascript/inheritance.html 以获取更多信息。 - ArtoAle
如果他只需要一个条件,那么这可能有些过度了.. 如果你需要在很多地方使用它,那么这种方法会更好。 - CrayonViolent
@CrayonViolent 是的。我的意思是,如果经常使用,实现为增量形式会很好。 - Aliostad

5

有一个.indexOf()方法,它会返回字符串的位置,如果未找到则返回-1。


我一直认为那只适用于数组。 - magicianiam
不是的,它也适用于字符串!但我有点不清楚你是要在字符串中查找子字符串,还是进行精确(不区分大小写?)的字符串比较。 - CrayonViolent
区分大小写,但我计划使用tolowercase来简化问题。让我试试这个。谢谢。不知道为什么谷歌没有显示这个。 - magicianiam

1
myString.indexOf(myWord) > -1

或者,如果您需要一个函数:

function hasWord(myString, myWord) {
  return myString.indexOf(myWord) > -1;
}

0

你可以直接使用比较操作。

if ("dog" == "cat") {
  DoSomethingIfItIsTrue();
} else {
    DoSomethingIfItIsFalse();
}

严格来说,如果您采用这种方法,则应使用“===”而不是“==”。我怀疑大多数JavaScript编程人员会使用这个而不是扩展字符串原型,因此至少值得让人们养成使用“ ===”检查相等性的习惯。 - Mick Sear

0

我知道这不是你想要的确切答案,但这总是一种有效的方法。

if(var1 == var2){
  //do this
}else{
  //do that
};

根据大量的文章(以及我的个人观点),===测试比==更可靠(并且具有传递性)。此外,如果需要布尔值,他只需使用(var1 === var2 ? true: false) - ArtoAle
是的,我理解他想返回一个布尔值,但是之后他打算怎么处理它呢?我的假设是,如果为真,则执行某些步骤;如果为假,则执行其他步骤。但是,你关于 === 的理解是正确的。 - Cecil Theodore

0

实际上,.match()可以为您完成此操作,因为如果有任何模式匹配字符串,则返回一个数组,否则返回null。

无论如何,如果您只想检查一个字符串是否包含另一个字符串,您更可能使用indexOf()(如果未找到子字符串,则返回-1)。

第一种解决方案对于您的目的有点过度。

另一方面,如果您想要检查相等性,则可以使用`string1 === string2`


0

如果还有人怀疑...

另一位同事使用了indexOf()方法进行引用。该方法的返回值要么是“-1”,如果在数组中找不到字符串,要么是它找到的位置。

为了使用所需的返回值,您需要先进行检查,例如:

exampleMethod () {
const expression = ['string1', string2] .indexOf (this.exampleObject);
if (expression! = -1) {
 return true;
  } else return false;
}

基本上,您将利用此返回。
但是,可以简单地使用includes()方法:
exampleMethode(): boolean {
  return ['string1', 'string2'].includes(this.exampleObject);
}

这个方法的返回值可以简单地实现你想要的功能。它会将对象字符串与你想要检查的字符串数组进行比较,并返回一个布尔值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接