我的代码给了我jsHint的错误。我想这样做:
if (data.result == 't' || task == 'show') {
但是它告诉我我应该用“===”替换“==”有人能告诉我为什么它会给出这个消息吗?
答案 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 另一个。
- 如果两个布尔操作数都为真或两者都为假,则它们严格相等。
- 对于严格或抽象的比较,两个不同的对象永远不会相等。
- 如果操作数引用相同的对象,则仅比较对象的表达式。
- 空和未定义的类型是==(但不是===)。