可能是重复问题:
Javascript中 === 和 == :使用哪个“等于”运算符有关系吗?
JavaScript中 == 和 === 的区别
我有两个变量需要进行比较。
结果不应该相等,那么什么情况下我需要使用 != 和 !== 运算符?
因为当我使用这两个运算符时它们都可以正常工作,但我需要确切地知道它们的区别。
可能是重复问题:
Javascript中 === 和 == :使用哪个“等于”运算符有关系吗?
JavaScript中 == 和 === 的区别
我有两个变量需要进行比较。
结果不应该相等,那么什么情况下我需要使用 != 和 !== 运算符?
因为当我使用这两个运算符时它们都可以正常工作,但我需要确切地知道它们的区别。
!==
和===
比==
/!=
进行更严格的比较。前者不仅检查被比较的对象是否是相同的类型,还会检查值是否匹配。
使用==
将允许进行隐式转换,请参见以下示例。
(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,则
a. 如果 x 是 NaN,则返回 false。
b. 如果 y 是 NaN,则返回 false。
c. 如果 x 是与 y 相同的 Number 值,则返回 true。
d. 如果 x 是 +0 而 y 是 0,则返回 true。
e. 如果 x 是 0 而 y 是 +0,则返回 true。
f. 返回 false。
如果 Type(x) 是 String,则如果 x 和 y 是完全相同的字符序列(长度相同、对应位置的字符相同),则返回 true;否则,返回 false。
- 如果 Type(x) 是 Boolean,则如果 x 和 y 都是 true 或都是 false,则返回 true;否则,返回 false。
- 如果 x 和 y 引用同一对象,则返回 true。否则,返回 false。注意:此算法在对待有符号零和 NaNs 方面与 SameValue 算法 (9.12) 不同。
11.9.3 抽象相等比较算法
比较 x == y,其中 x 和 y 是值,得出 true 或 false。进行此类比较的方式如下:
如果 Type(x) 与 Type(y) 相同,则
a. 如果 Type(x) 是 Undefined,则返回 true。
b. 如果 Type(x) 是 Null,则返回 true。
c. 如果 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)是字符串,则仅在x和y完全相同(长度相同且相应位置上的字符相同)时返回true。否则,返回false。 e. 如果Type(x)是布尔值,则仅在x和y都为true或者都为false时返回true。否则,返回false。 f. 如果x和y引用同一个对象,则返回true。否则,返回false。
- 如果x为null且y为undefined,则返回true。
- 如果x为undefined且y为null,则返回true。
- 如果Type(x)为数字且Type(y)为字符串,则返回比较结果x == ToNumber(y)。
- 如果Type(x)为字符串且Type(y)为数字,则返回比较结果ToNumber(x) == y。
- 如果Type(x)为布尔值,则返回比较结果ToNumber(x) == y。
- 如果Type(y)为布尔值,则返回比较结果x == ToNumber(y)。
- 如果Type(x)为字符串或数字,且Type(y)为对象,则返回比较结果x == ToPrimitive(y)。
- 如果Type(x)为对象,且Type(y)为字符串或数字,则返回比较结果ToPrimitive(x) == y。
- 返回false
!=
)版本将强制转换两个变量以使其类型相容后再进行比较。因此:"" == 0 -> true
"" === 0 -> false
其区别在于 !== 仅在变量类型相同且不相等的情况下返回 true。
1 !== "1"
也会返回 true。你的意思是:!== 的区别在于如果变量相等但类型不同,它将返回 true。 - murf1 !== "1"
(真)和 1 != "1"
(假)。 - murf
!=
。否则,请使用!==
。 - Šime Vidas