题目:如何让下面的表达式成立,成功打印出 123 ?
if(a==1&&a==2&&a==3){console.log(123)}
解决方案:
// 1. 利用Object.definePrototype(function () { let i = 0; Object.defineProperty(window, 'a', { get () { return ++i; } })})()if (a == 1 && a == 2 && a == 3) { console.log(a, 123) }
// 2. 利用隐式转换 valueOfvar a = {i: 0};a.valueOf = function () { return a.i += 1; }if (a == 1 && a == 2 && a == 3) { console.log(a, 123) }
// 3. 利用隐式转换 toStringvar a = {i: 0};a.toString = function () { return a.i += 1; }if (a == 1 && a == 2 && a == 3) { console.log(a, 123) }
// 4. 利用隐式转换 [Symbol.toPrimitive]var i = 0;var a = { [Symbol.toPrimitive]() { return ++i ;}}
if (a == 1 && a == 2 && a == 3) { console.log(a, 123) }