前端面试题之实现a==1&&a==2&&a==3

if (a == 1 && a == 2 && a == 3) {
  console.log('Win')
}
复制代码

一.问题分析:

如何让if条件判断中的值为真,从而输出win

因为js是单线程的,即使写在同一行的代码也是从左往右开始执行,所以回到问题本身,想要条件成立,就需要获取一次a的同时,让它自增1。

二.解决办法:

tostring()   利用判断过程中的[隐式转换]的toString方法

const a = {
  _a: 0,
  toString: function() {
    return ++a._a
  }
}
 

运行一次,就给_a加1,然后返回

因为toString是Object.prototype上面默认的方法,所以相当于把正常的隐式转换中toString方法给拦截了

三.如果变成三个等怎么办?

===的话是先判断类型,再判断值,这里的toString已经默认把对象转换为字符串了,使用toString的话,结果就不成立了

使用对象的defineProperties对象的数据拦截法

Object.defineProperties(window, {
  _a: {
    value: 0,
    writable: true
  },
  a: {
    get: function() {
      return  ++_a
    }
  }
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值