== 和 === 的区别

65 阅读1分钟

=== 严格判断

除了NaN === NaN 为false

+0 === -0 为true

其余判断都没有问题(上诉两个问题可以用Object.is(A,B)解决 或者通过isNaN(NaN)来判断是否为NaN)

== 转换类型后判断

规则如下

  • 如果两个值的类型一样,则严格判断
  • 如果不一样,就类型转换
  • 一个是null、一个是false,那么相等
  • 一个是字符串、一个是数值,那么会将字符串转换为数字再比较
  • 如果随便一个值是布尔类型,将其转换为数字再比较(true转换为1, false转换为0)
  • 如果一个是对象,一个是基础类型类型,将对象通过toString()或者valueOf转换为基础类型,如果类型不相同,按照上面的规则继续转换。如果类型相同,则直接比较。
  • 其余都为false