题目:如何让下面的表达式成立,成功打印出 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. 利用隐式转换 valueOf var a = {i: 0}; a.valueOf = function () { return a.i += 1; } if (a == 1 && a == 2 && a == 3) { console.log(a, 123) }
// 3. 利用隐式转换 toString var 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) }