Loading

JS中a == 1 && a == 2 && a == 3 是否为true

今天在逛社区中看到如下一题:

var a = ?;
if(a == 1 && a == 2 && a == 3){
  console.log('hello')
}

问是否能打印出 hello?

先来分析一下:
if 判断中 a == 1 && a == 2 && a == 3 注意这里使用的是 == 而不是 ===
==在判断的时候会进行类型转换,在转换的时候会用 a 的 toString 方法。
这时我们可以这么写:

var a = {
  val: 1,
  toString() {
    console.log(a.val);
    return a.val++;
  },
};

还有一种方式是

var a = [1, 2, 3];
a.join = a.shift;

当 a 为数组的时 进行类型转换时会调用 a 的 join 方法,我们把 join 方法替换为 shift,那么判断就等于 1 == 1 && 2 == 2 && 3 == 3

posted @ 2021-08-10 12:31  谢小舜  阅读(212)  评论(0)    收藏  举报