JavaScript中相等操作符的类型转换

不同类型的值用==操作符比较后的结果

JavaScript中相等操作符的类型转换

toNumbertoPrimitive方法是内部的

JavaScript中相等操作符的类型转换

JavaScript中相等操作符的类型转换


文字描述及补充:

一、首先看双等号前后有没有NaN,如果存在NaN,一律返回false。
二、再看双等号前后有没有布尔,有布尔就将布尔转换为数字。(false是0,true是1)
三、接着看双等号前后有没有字符串, 有三种情况:
1、对方是对象,对象使用toString()或者valueOf()进行转换;
2、对方是数字,字符串转数字;(前面已经举例)
3、对方是字符串,直接比较;
4、其他返回false
四、如果是数字,对方是对象,对象取valueOf()或者toString()进行比较, 其他一律返回false
五、null, undefined不会进行类型转换, 但它们俩相等


例题:

1.var a = [3];
if(a){
alert(a==ture);
};//返回false
因为:a是对象,a.valueOf()是3。  true是布尔值,转换为数字是1。3不等于1,所以为false
2.alert(null == undefined); //返回true

3.console.log(([])?true:false); 

console.log(([]==false?true:false)); 
console.log(({}==false)?true:false)
得到的结果分别是什么?()// true true false

解析:引用类型转换成基本类型才能进行==运算;引用类型转换成布尔都是true;

第一个:[] 转成布尔,true。
第二个:
按照隐式转换规则:
[] == false 
=> [].valueOf() == false 
 => [].toString() == false 
=> "" == false 
=> true
第三个:
{} == false 
=> {}.valueOf() == false
 => {}.toString() == false 
=> "[object object]" == false 
=> false