隐式类型转换多存在于使用 == 进行比较的场景,例如:

1
2
3
4
var a = 1;
var b = true;

console.log('a == b'); // true

不同类型的值用相等运算符比较后的结果,可以用下表总结。

紫竹

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

紫竹

toPrimitive():如果对象的 valueOf 方法的结果是原始值,返回原始值;如果对象的 toString 方法返回原始值,就返回这个值;其他情况都返回一个错误。

用例子来验证一下表格中的结果。

1
console.log(true == 'true'); // false
  • 首先,布尔值会被 toNumber 方法转换为数字,因此得到 true == 1
  • 其次,用 toNumber 转换字符串值。因为字符串包含字母,所以会被转成 NaN,因此表达式就变成了 1 == NaN,结果就是 false。