javascript中===与==

== equality 等同,=== identity 恒等。

==, 两边值类型不同的时候,要先进行类型转换,再比较。

===,不做类型转换,类型不同的一定不等。

类型转换规则:

Boolean>number:false>0,true>1;

number+string/object>number;

string+object>string; (toString)

特殊的比较:

null 和 undefined 是相等的。

null 和 undefined 不会转换为任何其他类型.

如果任何一个操作的结果为 NaN,那么相等比较返回 false,不相等比较返回 true。

注意,即使两个操作数都为 NaN,返回结果一样是 false,也就是说,NaN 不等于 NaN。

如果两个操作数都是对象,那么比较它们引用的值,如果引用同一个对象,那么,返回真,否则,返回假。

null,undefined的区别:和数字运算时,10 + null结果为:10; 10 + undefined结果为:NaN;

注意:false,0,"",null,undefined在if语句中做判断,都会执行false分支,而"0","\t"则是执行true分支。

!逻辑非,也会按上面的规则取值后,再取反

 1 alert(true == 2); //false
 2 
 3 var a = {};alert(a == "[object Object]");//true
 4 
 5 alert("0" == false); //true
 6 alert(!"0" == false ); //true
 7 
 8 alert(Number("\t") ); //0
 9 alert(parseInt("\t") ); //NaN
10 alert("\t" == false); //true,说明"\t"通过Number()函数转换成数值
11 
12 alert(!"\t" == false); //true
13 
14 alert("" == 0);//true
15 alert("0" == 0); //true
16 alert("0" != "");//true
17 alert("\t" != "0");//true
18 
19 alert(null == undefined);//true
20 alert((10 + null)==(10 + undefined));//false