龙空技术网

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

代码开发 6597

前言:

此刻朋友们对“js判断变量等于”大体比较重视,姐妹们都想要学习一些“js判断变量等于”的相关内容。那么小编同时在网摘上汇集了一些有关“js判断变量等于””的相关内容,希望大家能喜欢,我们一起来学习一下吧!

1.只要 [Symbol.toPrimitive] 接口,第一次返回的值是 1,然后递增,即成功成立:

let a = { [Symbol.toPrimitive]: (function(hint) { let i = 1; //闭包的特性之一:i 不会被回收 return function() { return i++; } })()}console.log(a == 1 && a == 2 && a == 3); //true
2.调用 valueOf 接口
let a = { valueOf: (function() { let i = 1; //闭包的特性之一:i 不会被回收 return function() { return i++; } })()}console.log(a == 1 && a == 2 && a == 3); //true
3. 正则
let a = { reg: /\d/g, valueOf () { return this.reg.exec(123)[0] }}console.log(a == 1 && a == 2 && a == 3); //true
4.利用数据劫持

①Object.defineProperty

let i = 1;Object.defineProperty(window, 'a', { get: function() { return i++; }});console.log(a == 1 && a == 2 && a == 3); //true

②Proxy

let a = new Proxy({}, { i: 1, get: function () { return () => this.i++; }});console.log(a == 1 && a == 2 && a == 3); // true
5.数组的 toString 接口默认调用数组的 join 方法,重写数组的 join 方法。
let a = [1, 2, 3];a.join = a.shift;console.log(a == 1 && a == 2 && a == 3); //true
6.利用 with 关键字
let i = 0;with ({ get a() { return ++i; }}) { console.log(a == 1 && a == 2 && a == 3); //true}

实际上还有很多方法,工作中用不到,意义也不大。最多笔试时可能遇到。

标签: #js判断变量等于