可能重复:
Javascript === vs == : Does it matter which “equal” operator I use?
Difference between == and === in JavaScript
我有两个要比较的变量。
结果不应该相等,我需要使用哪种条件!=和!==?
因为当我使用两个操作符时它正常工作,但我需要确切地知道有什么区别。
答案 0 :(得分:27)
使用!==
和===
将比==
/ !=
进行更严格的比较。前者将检查被比较的对象是否属于同一类型,以及值是否匹配。
使用==
可以进行隐式转换,请参阅以下示例。
(0 == '0') // true
(0 === '0') // false
('' == 0 ) // true, the string will implicitly be converted to an integer
('' === 0 ) // false, no implicit cast is being made
11.9.6严格的平等比较
算法比较x === y,其中x和y是值,产生true或false。这样的比较 执行如下:
- 如果Type(x)与Type(y)不同,则返回false。
- 如果Type(x)为Undefined,则返回true。
- 如果Type(x)为Null,则返回true。
如果Type(x)是Number,那么
一个。如果x是NaN,则返回false。
b。如果是NaN,则返回false。
℃。如果x与y的Number值相同,则返回true。
d。如果x是+0且y是0,则返回true。
即如果x是0且y是+0,则返回true。
F。返回false。
如果Type(x)是String,则如果x和y完全相同的字符序列(相同的长度和相同的字符),则返回true 相应的职位);否则,返回false。
- 如果Type(x)是布尔值,如果x和y都为true或两者都为false,则返回true;否则,返回false。
- 如果x和y引用同一个对象,则返回true。否则,返回false。注意此算法与SameValue算法不同(9.12) 处理有符号的零和NaN。
醇>
11.9.3抽象等式比较算法
比较x == y,其中x和y是值,产生true或 假。这样的比较如下进行:
如果Type(x)与Type(y)相同,那么
一个。如果Type(x)是Undefined,则返回t rue。
湾如果Type(x)为Null,则返回true。
℃。如果Type(x)是Number,那么
1. If x is NaN, return false. 2. If y is NaN, return false. 3. If x is the same Number value as y, return true. 4. If x is +0 and y is 0, return true. 5. If x is 0 and y is +0, return true. 6. Return false.
d。如果Type(x)是String,则如果x和y完全相同则返回true 相同的字符序列(相同的长度和相同的字符) 相应的职位)。否则,返回false。
即如果Type(x)是布尔值,如果x和y都为true或则返回true 都是假的。否则,返回false。 F。如果x和y引用同一个对象,则返回true。否则,返回false。
- 如果x为null且y未定义,则返回true。
- 如果x未定义且y为null,则返回true。
- 如果Type(x)为Number且Type(y)为String,则返回比较结果x == ToNumber(y)。
- 如果Type(x)为String且Type(y)为Number,则返回比较结果ToNumber(x)== y。
- 如果Type(x)是布尔值,则返回比较结果ToNumber(x)== y。
- 如果Type(y)是布尔值,则返回比较结果x == ToNumber(y)。
- 如果Type(x)是String或Number而Type(y)是Object,则返回比较结果x == ToPrimitive(y)。
- 如果Type(x)是Object而Type(y)是String或Number,则返回比较结果ToPrimitive(x)== y。
- 返回false
醇>
答案 1 :(得分:6)
不同之处在于前者(!=
)版本强制两个变量在比较之前是类型兼容的。因此:
"" == 0 -> true
"" === 0 -> false
另一个版本需要严格相等 - 这两个值必须属于同一类型且具有相同的值。大多数情况下,这是你应该实际使用的那个。
在对象的情况下,严格相等意味着它们实际上是相同的对象。对象之间的比较不会对对象的内容进行逐场比较。
有关详情,请参阅https://developer.mozilla.org/en/JavaScript/Reference/Operators/Comparison_Operators。
答案 2 :(得分:4)
区别很简单:!==仅当变量具有相同类型且相等时返回。