【每日一题】JavaScript数据结构|== 操作符的强制类型转换规则?Object.is() 和 == 、=== 的区别?
==
对于 == 来说如果比较双方的类型不同,就会进行类型转换。
-
假如对比
x和y是否相同,就会进行如下判断-
首先会判断两者的类型是否相同,是就直接比较两者大小。
-
类型不同,进行类型转换
-
首先判断是否是null和undefined的比较,是的话就返回 true,否则进入下一步对比
-
判断两者类型是否为String和number的比较,是的话将 String转换为number之后进行对比,否则进入下一步对比
-
判断其中一方是否为Boolean,是的话就把boolean转换成number之后再进行对比,否则进入下一步对比
-
判断其中一方是否为 object且另一方为 string、number、symbol,是的话就把object转换成原始数据类型在进行判断
-
'1' == { name: 'js' } ↓ '1' == '[object Object]'
-
-
-
Object.is() 和 == 、=== 的区别?
- == 做比较时,如果两边的类型不同,则会进行强制类型转换后再进行比较
- === 做比较时,如果两边类型不同时,直接返回false
- Object.is()做比较时,一般情况下和 === 的判断相同,但是它处理了一些特殊情况,比如 -0 和 +0不在想等,NaN和NaN的比较是想等的