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) }

 

转载于:https://www.cnblogs.com/EnSnail/p/9706398.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值