第一种:

解题思路1:掌握数据类型转换的规则,如果a是一个对象,我们就可以利用“对象->数字”的规则去做一些处理
var a = {
i: 0,
// a[Symbol.toPrimitive] 还可以重写:valueOf/toString
[Symbol.toPrimitive]() {
// this->a
return ++this.i;
}
};
if (a == 1 && a == 2 && a == 3) {
console.log('OK');
}
第二种
 
var a = [1, 2, 3];
a.toString = a.shift;
if (a == 1 && a == 2 && a == 3) {
console.log('OK');
}
 
 
第三种 
解决思路2:我们可以劫持对象的成员访问全局下声明的变量是window的一个属性 Object.defineProperty数据劫持的办法
 
let i = 0;
Object.defineProperty(window, 'a', {
get() {
return ++i;
}
});
if (a == 1 && a == 2 && a == 3) {
console.log('OK');
}