== 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"," "则是执行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(" ") ); //0 9 alert(parseInt(" ") ); //NaN 10 alert(" " == false); //true,说明" "通过Number()函数转换成数值 11 12 alert(!" " == false); //true 13 14 alert("" == 0);//true 15 alert("0" == 0); //true 16 alert("0" != "");//true 17 alert(" " != "0");//true 18 19 alert(null == undefined);//true 20 alert((10 + null)==(10 + undefined));//false