在JavaScript中检查string相等的正确方法是什么?

什么是正确的方法来检查JavaScript之间的string平等?

总是在您完全理解使用=====运算符的区别和含义之前,请使用===运算符,因为它可以帮助您避免模糊(不明显)的错误和WTF。 由于内部的types强制,“regular” ==运算符可能会有非常意想不到的结果,所以使用===始终是推荐的方法。

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


更新:

你不知道凯尔辛普森的JS系列是优秀的(并可以在线阅读)。 该系列进入了常见的语言误解领域,并解释了克罗克福德build议你避免的“坏部分”。 通过了解他们,你可以正确使用他们,避免陷阱。

“ Up&Going ”一书包含了一个关于Equality的部分,以及关于何时使用loose( == )vs strict( === )运算符的具体概述:

为了简化一些细节,并在各种情况下帮助你了解是否使用===== ,下面是我的简单规则:

  • 如果比较中的任何一个值(aka side)可以是truefalse值,则避免==并使用===
  • 如果比较中的任一值可能是这些特定值( 0""[] – 空数组),请避免==并使用===
  • 所有其他情况下,您可以安全地使用== 。 这不仅是安全的,而且在很多情况下它可以简化代码,提高可读性。

对于那些不想投入时间去真正理解Javascript的开发者,我仍然build议Crockford的发言 – 对于偶尔使用Javascript的开发者来说,这是一个很好的build议。

如果你知道他们是string,那么没有必要检查types。

 "a" == "b" 

但是,请注意,string对象不会相同。

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

将返回false。

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

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

将返回true

只有一个答案:如果所有这些方法返回false,即使这些string看起来是平等的,可能有一个string的左侧或右侧有一个空格。 因此,在比较之前,只需在string末尾添加一个.trim()

 if(s1.trim() === s2.trim()) {...} 

试图弄清楚什么是错误,我已经失去了数小时。 希望这会有助于某人!

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

如果你使用== ,你让语言为你做一些types的强制,例如:

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

正如道格拉斯·克罗克福德(Douglas Crockford)在他的书中所说

最好使用身份运算符。

是什么导致我这个问题是paddingwhite-spaces

检查我的情况

  if (title === "this word") doSomething(); 

和标题是" this word"

在这里输入图像描述

所以也许你必须使用像这样的trimfunction

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

实际上有两种方法可以在javascript中创buildstring。

  1. var str = 'Javascript'; 这会创build一个原始string值。

  2. var obj = new String('Javascript'); 这将创build一个Stringtypes的包装器对象。

    typeof str // string
    typeof obj // object

因此,检查相等性的最好方法是使用===运算符,因为它检查值以及两个操作数的types。

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

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

我已经提供了一些代码 (与下面相同)来解释与示例的JavaScripttypes转换相等比较。

 <!-- JavaScript has both strict and type-converting equality comparison. For strict equality the objects being compared must have the same type, presented by === (the triple equal sign). For strict equality, the objects being compared must be equal in type as well. Below I am going to provide you couple examples, I hope they help you! Please, don't forget to like my code. Thank you! --> <!DOCTYPE html> <html> <body> <p id="demo"></p> <script> document.write("The == and === comparison" + "<br>" + "<br>"); //document.write(" (0 == false) returns: " + (0 == false) + "<br>"); // true document.write((0 == false) + "<br>"); // true document.write((0 === false) + "<br>"); // false, because they are of a different type document.write((1 == "1" ) + "<br>"); // true, automatic type conversion for value only document.write((1 === "1" ) + "<br>"); // false, because they are of a different type document.write(('0' == false) + "<br>"); // true document.write(('0' === false) + "<br>"); // false document.write((2==='2') + "<br>"); //false document.write((2==="2") + "<br>"); //false document.write(("2"===2) + "<br>"); //true document.write((2===2) + "<br>"); //true document.write(("3"==3) + "<br>"); //true document.write((3=='3') + "<br>"); //true document.write((3==true) + "<br>"); //false /*Two numbers are strictly equal when they are numerically equal (have the same number value). */ document.write((3==3) + "<br>"); //true document.write((5.2==5.2) + "<br>"); //true /* Two strings are strictly equal when they have the same sequence of characters, same length, and same characters in corresponding positions. */ document.write(("hola"=="hola") + "<br>"); //true document.write(("hola"=="Hola") + "<br>"); //false, because they differ in a character 'H' /* NaN is not equal to anything, including NaN. Positive and negative zeros are equal to one another. */ document.write(("NaN"=="hola") + "<br>"); //false document.write(("NaN"== -3) + "<br>"); //false document.write(("NaN"== 3) + "<br>"); //false document.write(("NaN"== 2.5) + "<br>"); //false /* Two Boolean operands are strictly equal if both are true or both are false. */ document.write(((0 > 5) == (8 < 9 )) + "<br>"); // false, the first condition (0>5) returns false and (8<9) returns true document.write(((8 >= 5) == (8 == 9 )) + "<br>"); // false, the first condition (8>=5) returns true and (8==9) returns false document.write(((true) == (true)) + "<br>"); // true document.write(((false) == (false)) + "<br>"); // true /* Null and Undefined types are == (but not ===). [eg: (Null==Undefined) is true but (Null===Undefined) is false] */ document.write((null == undefined) + "<br>"); // true document.write((null === undefined) + "<br>"); // false /* Two objects are strictly equal if they refer to the same Object. */ var car1 = {type:"Fiat", model:"500", color:"white"}; var car2 = {type:"Fiat", model:"500", color:"white"}; var x = car1; document.write((car1 === car2)+ "<br> "); // false document.write((car1 == car2)+ "<br> "); // false document.write((car1 === x)+ "<br> "); // true document.write((car1 == x)+ "<br>"); // true /* DO NOT FORGET THAT = (a single equal sign) represents assignment. eg: var X = 3; Here we were assigning 3 to variable X */ </script> </body> </html>