区别和联系
- ===和:sameValue(Object.is使用此算法)之间的唯一区别在于它们处理带符号的 0 和 NaN 值的时候。=== 运算符将数值 -0 和 +0 视为相等,但是会将 NaN 视为彼此不相等
==
相等运算符用于比较两个值(x,y),返回true或false。步骤如下:
- 如果
x
不是正常值(比如抛出一个错误),中断执行。 - 如果
y
不是正常值,中断执行。 - 如果
Type(x)
与Type(y)
相同,执行严格相等运算x === y
。 - 如果
x
是null
,y
是undefined
,返回true
。 - 如果
x
是undefined
,y
是null
,返回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
网友评论