== 和 === 运算符有什么区别?
Javascript 287
JavaScript 提供了严格(===, !==
) 和类型转换(==, !=
) 相等比较。严格运算符考虑变量的类型,而非严格运算符根据变量的值进行类型校正/转换。严格的运算符遵循以下不同类型的条件,
- 当两个字符串具有相同的字符序列、相同的长度以及相应位置的相同字符时,它们是严格相等的。
- 当两个数字在数值上相等时,它们严格相等。即,具有相同的数值。这里有两种特殊情况,
NaN 不等于任何东西,包括 NaN。
正零和负零彼此相等。
- 如果两个布尔操作数都为真或都为假,则两个布尔操作数严格相等。
- 如果两个对象引用同一个对象,则它们严格相等。
- Null 和 Undefined 类型与
===
不相等,但与==
相等。即,null===undefined --> false
但null==undefined --> true
一些涵盖上述情况的例子:
0 == false // true
0 === false // false
1 == "1" // true
1 === "1" // false
null == undefined // true
null === undefined // false
'0' == false // true
'0' === false // false
[]==[] or []===[] //false, 引用内存中的不同对象
{}=={} or {}==={} //false, 引用内存中的不同对象