JavaScript(5) - 相等操作符(==和===)

==比较符

不同类型的值用相等操作符比较后的结果如下表:

类型(x) 类型(y) 结果
undefined null true
null undefined true
数字 字符串 x == toNumber(y)
字符串 数字 toNumber(x) == y
布尔值 任何类型 toNumber(x) == y
任何类型 布尔值 x == toNumber(y)
字符串或数字 对象 x == toPrimitive(y)
对象 字符串或数字 toPrimitive(x) == y

如果x和y是相同类型,JavaScript会比较他们的值或者对象值。其他没有列在上述表格中的情况都会返回false。
toNumber和toPrimitive方法都是内部的。

toNumber方法对不同类型返回的结果如下:

数值类型 结果
undefined NaN
null 0
布尔值 true是1,false是0
字符串 将字符串解析成数字。如果字符串中包含字母,返回NaN;如果是数字字符组成的,转换成数字。
对象 Number(toPrimitive(obj))

toPrimitive方法对不同类型返回的结果如下:

数值类型 结果
对象 如果对象的valueOf方法的结果是原始值,返回原始值;如果对象的toString方法返回原始值,就返回这个值;其他返回错误

===比较符

如果比较的两个值类型不同,比较的结果就是false;如果比较的两个值类型相同,则如下表:

类型 结果
数字 x、y的数值相同(但不是NaN) true
字符串 x、y是相同的字符串 true
布尔值 x、y同为ture或false true
对象 x、y引用的同一个对象 true