Abstract Equality Comparison

  1. x不是正常值,中断执行
  2. y不是正常值,中断执行
  3. 如果x和y的类型相同,返回执行严格相等比较运算的结果
  4. x是null,y是undefined,返回true
  5. x是undefined,y是null,返回true
  6. x的类型是Number,y的类型是String,把y转换成Number后进行比较
  7. x的类型是String,y的类型是Number,把x转换成Number后进行比较
  8. x的类型是Boolean,把x转换成Number后进行比较
  9. y的类型是Boolean,把y转换成Number后进行比较
  10. x的类型是String、Number或Symbol,y的类型是Object,把y转换成基元类型(ToPrimitive)后进行比较
  11. x的类型是Object,y的类型是String、Number或Symbol,把x转换成基元类型后进行比较
  12. 返回false

总结一下:

  1. x、y有一方不是正常值,中断执行
  2. x、y类型相同,按照严格相等比较
  3. x、y有一方为null,另一方为undefined,返回true
  4. x、y有一方为Number,另一方为String,把String转换成Number,然后比较
  5. x、y有一方为Boolean,把Boolean转换成Number,然后比较
  6. x、y有一方是Object,另一方是String、Number、Symbol,把Object转换成基元类型,然后比较
  7. 返回false

按照上面的说法,如果true == {},会先把true转换成Number,后把{}转换成基元类型,最终比较的应该是1 == NaN


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注