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

What is the correct way to check for string equality in JavaScript?

在javascript中,检查字符串之间是否相等的正确方法是什么?


alwaysuntil you fully understand the differences and implications of using the ==and ===operators,use the ===operator since it will save you from smokened(non obligent)bugs and wtfs.由于类型内部强制,"常规"==运算符可能会产生非常意外的结果,因此使用===始终是推荐的方法。

为了深入了解这一点,以及JavaScript的其他"好与坏"部分,请阅读Douglas Crockford先生及其著作。有一个伟大的谷歌技术讲座,他总结了很多好的信息:http://www.youtube.com/watch?V=HqvTijbZok

更新:

你不知道凯尔·辛普森的JS系列非常棒(而且可以免费在线阅读)。本系列文章深入到了人们普遍误解的语言领域,并解释了克罗克福德建议你避免的"坏部分"。通过理解它们,你可以正确地利用它们并避免这些陷阱。

"升级"本书包括一节关于平等的内容,其中特别总结了何时使用松散(==和严格(===运算符:

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的开发人员来说是个好建议。


如果您知道它们是字符串,那么就不需要检查类型。

1
"a" =="b"

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

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

将返回false。

调用valueof()方法将其转换为字符串对象的基元,

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

将返回真


只需在答案中添加一个:如果所有这些方法都返回false,即使字符串看起来是相等的,也可能在一个字符串的左右两侧都有空白。所以,只需在字符串的末尾放一个.trim(),然后比较:

1
2
3
4
if(s1.trim() === s2.trim())
{
    // your code
}

我花了很多时间想弄清楚是怎么回事。希望这对某人有帮助!


是什么让我想到这个问题的,是paddingwhite-spaces

检查我的情况

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

标题是" LastName"

enter image description here

so maybe you have to use trim function like this

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


除非你真的知道强制是如何工作的,否则你应该避免使用==,而是使用身份操作符===。但是你应该读这个来理解它是如何工作的。

如果您使用==,您可以让语言为您执行某种类型的强制,例如:

1
2
3
"1" == 1 // true
"0" == false // true
[] == false // true

正如道格拉斯·克罗克福德在书中所说:

It’s always better use the identity operator.


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

  • var str = 'Javascript';这将创建一个原始字符串值。

  • var obj = new String('Javascript');这将创建包装对象类型为String

    typeof str // stringtypeof obj // object

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

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

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


    字符串Objects可以使用这个hack JSON.stringyfy()进行检查。

    1
    2
    3
    4
    var me = new String("me");
    var you = new String("me");
    var isEquel = JSON.stringify(me) === JSON.stringify(you);
    console.log(isEquel);


    在测试期间,我想出了一个替代方案。您可以在字符串原型上使用函数。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    String.prototype.betwenStr = function(one){

    return JSON.stringify(new String(this)) === JSON.stringify(new String(one));

    }


     //call it
    "hello world".betweenStr("hello world"); //returns boolean
     //value

    在Chrome浏览器中工作正常