js速记--相等性判断

79 阅读1分钟

相等判断分类

  • 严格比较
  • 宽松比较
  • SameValue
  • SameValueZero

严格比较

  • 不会进行隐式类型转换
  • 类型相同且值也相同
  • NaN与NaN相比为false
  • +0与-0比较为true

宽松比较

  • 相同类型比较
    • 如果是引用类型,则需要比较引用地址是否一样
    • 基本类型,直接比较值是否相同,需要注意NaN始终不等于NaN,+0等于-0
    • Symbol类型,两个比较的数需要引用相同的symbol才能相等
  • 不同类型比较
    • null == undefined 会返回true
    • 一个对象和基本类型比较,会将对象转为原始值后进行比较
    • 一个Symbol和其他类型比较,返回false
    • Boolean和其他比较,Boolean会转为Number:true转为1,false转为0
    • String和Number比较,会将String转为Number,如果转换失败,会得到NaN,这样结果肯定是false
    • 所有原始类型和对象都不与undefined和null宽松相等

SameValue

同值相等,相对于严格比较:NaN与NaN是相等的,+0与-0不相等 Object.is()内部使用的就是同值比较

SameValueZero

相对于SameValue,只有一点不一样:+0与-0相等 没有开放的api使用这个方式,但是在一些api内部使用的就是这样的模式