【每日一题】JavaScript数据结构|== 操作符的强制类型转换规则?Object.is() 和 == 、=== 的区别?

160 阅读1分钟

【每日一题】JavaScript数据结构|== 操作符的强制类型转换规则?Object.is() 和 == 、=== 的区别?

==

对于 == 来说如果比较双方的类型不同,就会进行类型转换。

截屏2022-02-15 下午2.50.44.png

  • 假如对比 xy 是否相同,就会进行如下判断

    • 首先会判断两者的类型是否相同,是就直接比较两者大小。

    • 类型不同,进行类型转换

      • 首先判断是否是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的比较是想等的