方法1:valueOf()或者toString()
原理:利用 宽松相等的隐式类型转换、ToPrimitive抽象操作、原型的委托链接机制修改内置类型 Number原型上的 valueOf()或toString()。
var i = 1;
Number.prototype.valueOf = function() {
return i++;
};
var a = new Number(1);
a == 1 && a ==2 // true
方法2:Object.defineProperty 、get
原理: 利用属性定义符设置属性的get()
var i = 1;
Object.defineProperty(window, 'a', {
get: function() {
return i++;
},
})
a == 1 & a == 2 // true
有兴趣的小伙伴,可以思考下 a == 2 && a ==1如何成立?