今天遇到一个有趣的题,特此记录下
let a = ?;
(a==1 && a==2 && a==3) {
console.log('yes')
}
问 a 的值是什么时可以输出 yes,首先 a 肯定不是一个具体的值,那有可能是一个对象,对象在比较的时候会进行 valueOf 方法或 toString 方法,那么可以通过改写 num 方法来改变 a 的值。
let a = {
val: 1,
toString() {
return a.val++;
}
}
还可以通过 Object.defineProperty 来实现
let num = 0;
Object.defineProperty(window, 'a', {
get() {
return ++num;
}
})
总结
- 利用对象比较时会进行
toString的方法 - 利用
Object.defineProperty劫持JS对象的getter







网友评论