(a ==1 && a== 2 && a==3) 有可能是 true 吗?

第一种解法:

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

if (a == 1 && a == 2 && a == 3) {
  console.log('成功')
}

// 之所以成功,因为使用了松散相等的运算符,使用松散相等时,如果其中一个操作数与另一个类型不同,则 JS 引擎将尝试将一个操作转换为另一个类型。
// 在左边对象、右边的数字的情况下,它会尝试将对象转换为一个数,首先通过调用 valueOf 如果是可调用的。否则,它会调用toString方法。

第二种解法:

const a_ = 1;
const a = 2;
const _a = 3;
if (a_ == 1 && a == 2 && _a == 3) {
  console.log('成功')
}
// 有三个不同的变量来声明,本质上没有做到题设(不推荐)

第三种解法:

let val = 0;
Object.defineProperty(window, 'a', {
  get: function() {
    return ++val
  }
})


if (a == 1 && a == 2 && a == 3) {
  console.log('成功')
}

// 使用 get, 让 a 返回三个不同的值,在真正的代码逻辑中不推荐使用

 

posted on 2018-02-07 11:06  道法自然-法力无边  阅读(144)  评论(0编辑  收藏  举报

导航