今天遇到一个有趣的题,特此记录下
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
网友评论