【发布时间】:2013-11-19 15:42:01
【问题描述】:
我的代码给我一个 jsHint 错误。我正在尝试这样做:
if (data.result == 't' || task == 'show') {
但它告诉我应该用“===”替换“==”有人能告诉我为什么它会给出这个信息吗?
【问题讨论】:
标签: javascript
我的代码给我一个 jsHint 错误。我正在尝试这样做:
if (data.result == 't' || task == 'show') {
但它告诉我应该用“===”替换“==”有人能告诉我为什么它会给出这个信息吗?
【问题讨论】:
标签: javascript
=== 是严格相等运算符。
== 是普通的相等运算符,== 将其操作数转换为相同类型,如果它们尚未属于相同类型。
因此,尽管"" == 0 之类的内容属于不同类型,但仍有可能为您提供真实的信息。
由于涉及到隐式转换,您可能不会因为它是自动发生的而忽略它,因此存在一些难以追踪的错误或错误的危险和可能性。
=== 不会转换它的操作数,它只会比较它们。
【讨论】:
"" == 0,所以你没有回答问题。
静默类型转换可能是错误的来源。如果您避免在比较时在数据类型之间进行转换,那么您就可以避免许多此类错误。
【讨论】:
=== 表示没有类型强制的相等。 === 运算符不会进行转换,它只会比较操作数。
sdfxhere给出的例子对理解这个很有帮助:
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。正负零等于一 另一个。
- 如果两个布尔操作数都为真或都为假,则两个布尔操作数严格相等。
- 对于严格比较或抽象比较,两个不同的对象永远不会相等。
- 仅当操作数引用相同的对象时,比较对象的表达式才为真。
- Null 和未定义类型是 ==(但不是 ===)。
【讨论】: