如何实现 a == 1 && a == 2同时成立?

方法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如何成立?

你可能感兴趣的:(如何实现 a == 1 && a == 2同时成立?)