js面试题

题目:如何让下面的表达式成立,成功打印出 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) }

 

posted @ 2018-09-28 10:30  ESnail  阅读(262)  评论(0编辑  收藏  举报