宽松相等(==)与严格相等(===)二者都是用于判断两个值是否相等,但它们在判断条件上有很大的区别,== 允许在相等比较中进行强制类型转换,而===不允许。==和===都会检测操作数的类型,区别在于操作数类型不同时,它们的处理方式不同。
如何解释
错误的解释:
“==检查值是否相等,===检查值和类型是否相等。” 在此解释中,===似乎比==做的事情更多,因为它还要检查值的类型。正确的解释:
“==允许在相等比较中进行隐式强制类型转换,而===不允许。” 在此解释中,==的工作量更大一些,因为如果值的类型不同,还需要进行强制类型转换。
如何转换
值类型相同
:==和===使用相同的算法,所以除了JS引擎实现上的细微差别之外,它们之间并没有什么不同。值的类型不同
:我们就需要考虑是否有强制类型转换的必要,若有就用==,没有就用===,不用在乎性能。
特殊例子
假值相等比较
null与undefined
在 == 中 null 和 undefined 相等(它们与其自身相等),除此之外其他值都不存在这种情况。即,在 == 中 null 与 undefined 是一回事,可以相互进行隐式强制类型转换。
布尔与数字、字符串
1 | Number(true) = 1 |