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

1、对象在与字符串拼接或比较时,首先会通过valueOf()方法来调用其原始值。原始值即其本身的值。

var a ={};

console.log(a.valueOf());// {}

console.log(a === a.valueOf());// true

console.log(typeof a.valueOf());// object


2、如果值为对象,则会调用toString()方法。若对象本身没有该方法,会返回"[object ObjectName]",其中 ObjectName 是对象类型的名称。

var a = {};

console.log(a.toString());// [object Object]

console.log(a.toString() + 1);// [object Object]1

console.log(a + 1 === a.toString() + 1);// true


3、该对象obj下如果有toString()方法,会调用该方法。

var a = {

    toString(){

        return 1;

    }

};

console.log(a.toString());// 1

console.log(a.toString() + 1);// 2

console.log(a + 1 === a.toString() + 1);// true


4、通过以上三点推断出:对象每进行一次比较或拼接都会执行toString方法。

var num =1;

var a = {

    toString(){

        return ++num;

    }

};

console.log(a+"");// 2

console.log(a+"");// 3

console.log(a + 1);// 5

console.log(a == 5);// true

5、现在再来看下答案是不是很简单了?

var  a = {

    i: 1,

    toString: function () {

        return a.i++;

    }

}

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

    console.log(1);

}

————————————————

版权声明:本文为CSDN博主「张培跃吧」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/u012149969/article/details/88983321

你可能感兴趣的:(var a = ?; if(a == 1 && a == 2 && a == 3){ console.log(1); })