emac ==、 ===、sameValue、sameValueZero怎么解释 ?

区别和联系

  • ===和:sameValue(Object.is使用此算法)之间的唯一区别在于它们处理带符号的 0 和 NaN 值的时候。=== 运算符将数值 -0 和 +0 视为相等,但是会将 NaN 视为彼此不相等

==

相等运算符用于比较两个值(x,y),返回true或false。步骤如下:

  • 如果x不是正常值(比如抛出一个错误),中断执行。
  • 如果y不是正常值,中断执行。
  • 如果Type(x)Type(y)相同,执行严格相等运算x === y
  • 如果xnullyundefined,返回true
  • 如果xundefinedynull,返回true
  • 如果Type(x)是数值,Type(y)是字符串,返回x == ToNumber(y)的结果。
  • 如果Type(x)是字符串,Type(y)是数值,返回ToNumber(x) == y的结果。
  • 如果Type(x)是布尔值,返回ToNumber(x) == y的结果。
  • 如果Type(y)是布尔值,返回x == ToNumber(y)的结果。
  • 如果Type(x)是字符串或数值或Symbol值,Type(y)是对象,返回x == ToPrimitive(y)的结果。
  • 如果Type(x)是对象,Type(y)是字符串或数值或Symbol值,返回ToPrimitive(x) == y的结果。
  • 返回false

总结

  • 类型相同,按===
  • 类型不同
    • number和string , str ToNumber再比较
    • 有boolean , boolean转number再比较
    • number\string\symbo 和object

===

SameValue

Object.is使用的sameValue算法

SameValueZero

SameValueZero:Set值相关api、Map key相关api

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容