es6-==源码
- ReturnIfAbrupt(x).
- ReturnIfAbrupt(y).
- If
Type(x)is the same asType(y), then
- Return the result of performing Strict Equality Comparison
x === y.- If
xisnullandyisundefined, returntrue.- If
xisundefinedandyisnull, returntrue.- If
Type(x)is Number andType(y)is String, return the result of the comparisonx == ToNumber(y).- If
Type(x)is String andType(y)is Number, return the result of the comparisonToNumber(x) == y.- If
Type(x)is Boolean, return the result of the comparisonToNumber(x) == y.- If
Type(y)is Boolean, return the result of the comparisonx == ToNumber(y).- If
Type(x)is either String, Number, or Symbol andType(y)is Object, then return the result of the comparisonx == ToPrimitive(y).- If
Type(x)is Object andType(y)is either String, Number, or Symbol, then return the result of the comparisonToPrimitive(x) == y.- Return
false.
上面这段算法,一共有 12 步,翻译如下。
- 如果
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。引自:阮一峰
浙公网安备 33010602011771号