接触过js语言,==和===是绕不开的话,可以说拿捏不好这两个的区别,就写不出高质量的js代码,bug也会随形相伴,甩也甩不掉。下面记录了关于==和===的区别,能达到一劳永逸的目的。
==隐式类型转换原理
javascript中有两个值通过==比较,将会发生两种情况:
- ==两边的类型不一致,则隐式转换成number基本类型的值进行比较;
- ==两边类型不是对象类型且类型一致的话或者转换后类型一致了,则不再转换成number类型了。
- ==两边其中一个类型是对象类型,则调用toString()之后做比较。
这里注意一下,数组通过调用toString()之后,其实是返回一个字符串:

了解数组toString之后,我们可以通过以下代码看就比较直观易懂了:
if ('0' == 0) // true 遇到跟number类型比较,则Number('0'.toString()) = 0===0
if ('' == 0) // true 遇到跟number类型比较,则Number(''.toString()) = 0===0
[] == 0 // true
[''] == 0 // true
[] == false // true
[''] == false // true
[] == '' // true
[''] == '' // true
[] == ![] // true,![]转换成false,Number([].toString())==0,false转成0,所以相等。
在浏览器中执行以上的结果打印如下:

注意!!!null和undefined进行比较才能为true
null == undefined // true '' == null // false '' == undefined // false
if 只有单值
if(单值),如果没有==的情况下,只有以下的值才会为假值:
- 0
- '0'
- false
- null
- undefined
- ''
- NaN
- !真值
=== 不会造成隐式类型转换
===不会造成隐式类型转换,所以我们在开发的时候,最好使用===,保证值相等的情况下,类型也一致,代码层面安全可靠,造成不必要的bug。
本文深入探讨JavaScript中==和===的区别,揭示隐式类型转换的原理。当使用==时,不同类型的值会尝试转换为number进行比较,而===则不进行类型转换,确保值和类型的严格匹配。了解这些差异对于编写无bug的高质量JS代码至关重要。建议开发者在实践中优先使用===以提高代码的可靠性。

被折叠的 条评论
为什么被折叠?



