JS类型转换原理
如何让 (a == 1 && a == 2 && a == 3) 的值为 true?
这个问题考查的数据类型转换,== 类型转换有个基本规则
NaN 与任何值都不相等,包括自己本身
undefined 与 null 相等(==),其他都不等
对象与字符串类型做比较,会把对象转换成字符串然后做比较
其他类型比较都要转换成 数字 做比较
那么这个问题我们重写 toString 或者 valueOf 方法就可以了
const a = {
val: 1,
toString() {
return this.val++;
},
};
if (a == 1 && a == 2 && a == 3) {
console.log('ok');
}
var i = 1;
Object.defineProperty(window, 'a', {
get() {
return i++;
},
});
if (a == 1 && a == 2 && a == 3) {
console.log('OK');
}
[] == ![] 是true还是false
- 首先 [].toString() 会得到一个 ‘’ 字符串
- ![] 得到一个布尔值 false
- “ ” 与 false 比较肯定要转换成数字比较
- 那么 ‘’ 转换则为 0, false 转换也是 0
- 所以这道题就是 true