一道无聊的js 判断题

if(a == 1 && a == 2 && a == 3){

console.log('hello world')

}

有可能为真么?

答案是 true

求解释

阅读 4.6k
6 个回答
var a = {
  i : 0,
  toString : function() {
    return ++this.i;
  }
};
if (a == 1 && a == 2 && a == 3) {
  alert('前几天刚在群里看有人发。不得不说==坑多 (原文好像是知乎那里的 如果不是那就不知道了)');
}

原理:

clipboard.png

clipboard.png

方案:
a 是对象,重写 a 的 toString() 或 valueOf 方法

var a = {
    value: 0,
    valueOf: function () {
        if (this.value === 3) {
            this.value = 1
        } else {
            this.value += 1
        }
        return this.value
    }
}
if (a == 1 && a == 2 && a == 3) {
    console.log('hello world')
}

重写了a的valueof方法 3次调用分别返回 1 2 3 ,这样if里的条件判断就能够成立了。

掘金上看的吧

clipboard.png
这多一个空格 也是可以,少了就不行,这个不能理解

这种题确实是没有多大实际意义啊

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题