if (a == 1 && a == 2 && a == 3) {
console.log('Win')
}
复制代码
一.问题分析:
如何让if条件判断中的值为真,从而输出win
因为js是单线程的,即使写在同一行的代码也是从左往右开始执行,所以回到问题本身,想要条件成立,就需要获取一次a的同时,让它自增1。
二.解决办法:
tostring() 利用判断过程中的[隐式转换]的toString方法
const a = {
_a: 0,
toString: function() {
return ++a._a
}
}
运行一次,就给_a加1,然后返回
因为toString是Object.prototype上面默认的方法,所以相当于把正常的隐式转换中toString方法给拦截了
三.如果变成三个等怎么办?
===的话是先判断类型,再判断值,这里的toString已经默认把对象转换为字符串了,使用toString的话,结果就不成立了
使用对象的defineProperties对象的数据拦截法
Object.defineProperties(window, {
_a: {
value: 0,
writable: true
},
a: {
get: function() {
return ++_a
}
}
})