在JavaScript中检查字符串是否相等的正确方法是什么?


在您完全理解使用==和===操作符的区别和含义之前,请使用===操作符,因为它将避免您出现模糊的(不明显的)错误和wtf。由于内部的类型强制,“常规”==操作符可能会产生非常意想不到的结果,因此始终推荐使用===方法。

要深入了解这一点,以及Javascript的其他“好与坏”部分,请阅读Douglas Crockford先生和他的作品。有一个很棒的谷歌技术谈话,他总结了很多好的信息:http://www.youtube.com/watch?v=hQVTIJBZook


更新:

Kyle Simpson的《You Don’t Know JS》系列非常棒(可以在网上免费阅读)。本系列文章探讨了英语中常被误解的部分,并解释了Crockford建议你避免的“不好的部分”。通过理解它们,你可以正确地使用它们,避免陷阱。

“Up & Going”一书中有一节是关于相等的,具体总结了什么时候使用宽松(==)和严格(===)操作符:

To boil down a whole lot of details to a few simple takeaways, and help you know whether to use == or === in various situations, here are my simple rules: If either value (aka side) in a comparison could be the true or false value, avoid == and use ===. If either value in a comparison could be of these specific values (0, "", or [] -- empty array), avoid == and use ===. In all other cases, you're safe to use ==. Not only is it safe, but in many cases it simplifies your code in a way that improves readability.

对于那些不想花时间去真正理解Javascript的开发人员,我仍然推荐Crockford的演讲——对于那些只是偶尔使用Javascript的开发人员来说,这是一个很好的建议。


如果知道它们是字符串,则不需要检查类型。

"a" == "b"

但是,请注意字符串对象是不相等的。

new String("a") == new String("a")

将返回false。

调用valueOf()方法将其转换为String对象的原语,

new String("a").valueOf() == new String("a").valueOf()

将返回true


在javascript中实际上有两种方法可以创建字符串。

var str = 'Javascript';这将创建一个基本字符串值。 var obj = new String('Javascript');这将创建一个包装器对象 String类型。 Typeof STR //字符串 Typeof obj //对象

因此,检查是否相等的最好方法是使用===操作符,因为它检查两个操作数的值和类型。

如果你想检查两个对象是否相等,那么使用String.prototype.valueOf是正确的方法。

new String('javascript').valueOf() == new String('javascript').valueOf()

让我想到这个问题的是填充和空白

检查我的箱子

 if (title === "LastName")
      doSomething();

标题是"姓"

也许你需要像这样使用修剪函数

var title = $(this).text().trim();

只是对答案做了一个补充:如果所有这些方法都返回false,即使字符串看起来是相等的,也有可能在一个字符串的左右有一个空白。因此,在比较之前,只需在字符串的末尾加上.trim():

if(s1.trim() === s2.trim())
{
    // your code
}

我花了好几个小时想弄清楚是怎么回事。 希望这对一些人有所帮助!


字符串对象可以使用JSON.stringify()技巧检查。

var me = new String(“me”); var u = new String(“me”); var isEquel = JSON.stringify(me) === JSON.stringify(you); console.log(isEquel);


考虑到这两个字符串可能都非常大,有两种主要的方法按位搜索和localeCompare

我推荐这个函数

function compareLargeStrings(a,b){
    if (a.length !== b.length) {
         return false;
    }
    return a.localeCompare(b) === 0;
}

你可以使用==或===,但最后一个更简单(src)

A == b(和它的否定!=)

A === b(和它的否定!==)


严格的比较

要进行简单的比较,可以使用===来检查是否严格相等。正如其他人所说,这样做的优点是效率最高,并且可以减少出现错误或不确定代码的可能性。来源:MDN Web Docs:严格平等。

Var a = "hello1"; Var b = "hello2"; Console.log ("a === a?"+ (a == a) + "|"); Console.log ("a === b?"+ (a === b) + "|");

字母的比较

如果希望根据自然排序比较两个字符串,以了解一个字符串是在另一个字符串之前还是之后,请使用<、>、<=和>=操作符。来源:MDN WebDocs用于<,>,<=和>=。

Var a = "hello1"; Var b = "hello2"; Console.log ("a < a?"+ (a < a) + "|"); Console.log ("a < b?"+ (a < b) + "|"); Console.log ("a > b?"+ (a > b) +“|”); Console.log ("b > a?"+ (b > a) +“|”);


还要考虑["foo", "bar"] == "foo,bar"。


对于字符串,我们有一个支持的方法localCompare,它在字符串比较中非常方便。在我看来,我们应该使用它,不需要把事情复杂化。

用法:

const a = 'Hello'
const b = 'Hell'

a.localCompare(a) // 0
a.localCompare(b) // 1
b.localCompare(a) // -1