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

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

标签: js, es6

评论

  1. 测试测试

我们在初始化一个构造函数实例时,需要用new操作符去初始化实例,那么我们在new 一个构造函数的时候new到底为我们做了什么呢?