JavaScript (a == 1 && a == 2 && a==3) 可能为 true 吗?
刚刚在网上看到一个有意思的问题。JavaScript (a == 1 && a == 2 && a==3) 可能为 true 吗?
那么,我们来研究一下
实现方法
- 重写 toString() 方法
/* 为了将(==)的两端类型一致,js首先调用valueOf,若不可用则调用toString。*/
const a = {
num: 1,
toString: function () {
return a.num++;
}
}
if(a == 1 && a == 2 && a == 3) {
console.log('Override toString!');
}
- Object.defineProperty() 实现
var val = 0;
Object.defineProperty(window, 'a', {
get: function() {
return ++val;
}
});
if (a == 1 && a == 2 && a == 3) {
console.log('defineProperty can be implemented!');
}
其实方法还有很多哦,有兴趣可以点击查看更多
参考知识
JavaScript中的== 与 ===
Object.defineProperty()
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
用法
Object.defineProperty(obj, prop, descriptor)
参数
参数 | 解释 |
---|---|
obj | 要定义属性的对象。 |
prop | 要定义或修改的属性的名称或 Symbol 。 |
descriptor | 要定义或修改的属性描述符。 |
返回值
被传递给函数的对象。