如何让 (a == 1 && a == 2 && a == 3) 的值为true?

2019-07-102063次阅读javascript

1、利用隐式类型转换

==操作符在左右数据类型不一致时,会先进行隐式转换。

a == 1 && a == 2 && a == 3 的值意味着其不可能是基本数据类型。因为如果a是null或者是undefined boolean类型,都不可能返回true。

因此可以推测a是复杂数据类型,JS中复杂数据类型只有object。

const a = {
   value:[3,2,1],
   valueOf: function () {return this.value.pop(); },
}

从引用类型到基本类型的转换,也就是拆箱的过程中,会遵循ECMAScript规范规定的toPrimitive原则,一般会调用引用类型的valueOf和toString方法,你也可以直接重写toPeimitive方法。一般转换成不同类型的值遵循的原则不同,例如:

  • 引用类型转换为Number类型,先调用valueOf,再调用toString
  • 引用类型转换为String类型,先调用toString,再调用valueOf

了解更多请移步js隐式类型转换

 

2、利用数据劫持(Proxy/Object.defineProperty)

let a = new Proxy({},{
    i:1,
    get:function(){
        return ()=>this.i++;
    }
})

 

3、数组的toString接口默认调用数组的join方法,重写join方法

let a = [1,2,3];
a.join = a.shift;


 

上一篇: javascript柯里化函数实现  下一篇: ES5有几种方式可以实现继承?分别有哪些优缺点?  

如何让 (a == 1 && a == 2 && a == 3) 的值为true?相关文章