Stop using Loose Equality in JavaScript
不要再使用 == 了,改使用 === 吧!
发现问题
在 JavaScript 中常见可以使用两种方法来比较值:
两者的差别在于,一般相等会进行类型转换,而严格相等则不会,举例来说 1 == '1'
会转换字符串为数字再进行比较,因此会返回 true
,而 1 === '1'
则会严格的比较两者的类型所以会返回 false
。
那么这一小差别会造成什么潜在的问题呢?
使用松散的比较会让程序比对条件上模棱两可,像是以下的程序中很明显 0
与 ''
是不相等的,由于使用的是松散的比较,这样的程序撰写会让代码变得不够严谨,因此建议使用严格比对。
总结
凡事能用 ===
就不使用 ==
,一开始就撰写更严谨的判断会更好。由于 ==
并不检查类型,因此常常会被 Javasciprt 自动转换类型闹出 Bug ,举例来说:
在绝大多数的情况下,你不会想要使用松散比对,但是在某些情况下,可能会使用它会更为便利,例如当想要比较 null
与 undefined
时,因为它们的值是相等的但类型是不同的,在这个场合下使用 ==
会比较方便,使用松散比对可以一次对 null
与 undefined
的结果做比对:
详细两者比较上的差异比较图表可以参考 MDN 的文件:理解相等比较模型 非常齐全。