根据阮一峰介绍的算法文章分12部分可判断:
- 如果
x
不是正常值(比如抛出一个错误),中断执行。 - 如果
y
不是正常值,中断执行。 - 如果
Type(x)
与Type(y)
相同,执行严格相等运算x === y
。 - 如果
x
是null
,y
是undefined
,返回true
。 - 如果
x
是undefined
,y
是null
,返回true
。 - 如果
Type(x)
是数值,Type(y)
是字符串,返回x == Number(y)
的结果。 - 如果
Type(x)
是字符串,Type(y)
是数值,返回Number(x) == y
的结果。 - 如果
Type(x)
是布尔值,返回Number(x) == y
的结果。 - 如果
Type(y)
是布尔值,返回x == ToNumber(y)
的结果。 - 如果
Type(x)
是字符串或数值或Symbol
值,Type(y)
是对象,返回x == ToPrimitive(y)
的结果。(对象变为原始值通过valueOf() ,toString()得到 - 如果
Type(x)
是对象,Type(y)
是字符串或数值或Symbol
值,返回ToPrimitive(x) == y
的结果。 - 返回
false
。
一般是看最终能否变为number 原始值的比较, 布尔值false 变为0 ,空字符串'’ 变为0 ,‘12321’
object对象通过变为原始值变为对应的值(valueOf() ,toString(),原始类型有 Undefined、Null、Boolean、Number 和 String )
undefined 为null派生来的, 认为null == undefined ,但是数值类型不同