- 使用
==
时,意味着不同类型的值可以被看作相等:
类型(x) | 类型(y) | 结果 |
---|---|---|
null | undefined | true |
undefined | null | true |
数值 | 字符串 | x == toNumber(y) |
字符串 | 数值 | toNumber(x) == y |
布尔值 | 任何类型 | toNumber(x) == y |
任何类型 | 布尔值 | x == toNumber(y) |
字符串或数值 | 对象 | x == toPrimitive(y) |
对象 | 字符串或数值 | toPrimitive(x) == y |
toNumber() 和 toPrimitive() 是内部的。
值类型 结果 undefined NaN null +0 布尔值 true返回1;false返回+0 数值 数对应的值 对象 1. 如果对象的valueOf方法的结果是原始值,返回原始值;2. 如果对象的toString方法返回原始值,就返回这个值;3. 其他情况返回错误
举例:
console.log('aaa' == true); // false
解释:
- ‘aaa’ 是字符串,使用toString转成了NaN;
- true 是布尔值,使用toString转成了1;
- 这样结果就变成 NaN == 1,结果为false。
console.log('123' == 123); // true
解释:
- ‘123’ 是字符串,使用toString转成了123;
- 123 还是返回123;
- 结果就是 123 == 123,结果为true。
- 使用
===
时,如果值的类型不同,则结果返回的是false。
例如:
console.log('123' === 123); // false
如果值得类型相同:
类型(x) | 值 | 结果 |
---|---|---|
数值 | x和y的值相同(不是NaN) | true |
字符串 | x和y是相同的字符 | true |
布尔值 | x和y都是true或false | true |
对象 | x和y引用同一个对象 | true |