jsHint错误说我应该使用“===”

时间:2013-11-19 15:42:01

标签: javascript

我的代码给了我jsHint的错误。我想这样做:

if (data.result == 't' || task == 'show') {

但是它告诉我我应该用“===”替换“==”有人能告诉我为什么它会给出这个消息吗?

3 个答案:

答案 0 :(得分:3)

===是严格的相等运算符。

==是正常的等式运算符,==将其操作数转换为相同类型(如果它们不是同一类型)。

因此"" == 0之类的东西会有一些危险,尽管它们属于不同的类型。

由于涉及隐式转换,您可能不会因为它自动发生,因此存在一些危险和可能存在难以追踪的错误或错误。

===不会转换其操作数,只会比较它们。

答案 1 :(得分:1)

无提示类型转换可能是错误的来源。如果您在比较时避免在数据类型之间进行转换,那么您可以避免许多错误。

答案 2 :(得分:0)

===表示没有类型强制的平等。 ===运算符不会进行转换,它只会比较操作数。

sdfx here给出的示例非常有助于理解这一点:

0==false   // true
0===false  // false, because they are of a different type
1=="1"     // true, auto type coercion
1==="1"    // false, because they are of a different type

来自MDN

  

JavaScript具有严格和类型转换(抽象)比较。   严格比较(例如===)仅在操作数为时才为真   相同的类型。更常用的抽象比较(例如,==)   在进行比较之前将操作数转换为相同的类型。   对于关系抽象比较(例如,< =),操作数是第一个   在比较之前转换为基元,然后转换为相同的类型。

     

比较的特点:

     
      
  • 两个字符串在相应的字符中具有相同的字符序列,相同的长度和相同的字符时严格相等   位置。
  •   
  • 两个数字在数值上相等(具有相同的数值)时严格相等。 NaN不等于任何东西,   包括NaN。正负零等于1   另一个。
  •   
  • 如果两个布尔操作数都为真或两者都为假,则它们严格相等。
  •   
  • 对于严格或抽象的比较,两个不同的对象永远不会相等。
  •   
  • 如果操作数引用相同的对象,则仅比较对象的表达式。
  •   
  • 空和未定义的类型是==(但不是===)。
  •