有时候会经常碰见让你判断0," ",false,null,undefined间的关系,===还好说,一遇见==就会比较头疼。以特意好好查了查总结一下。
一、类型检测
alert(typeof(false) === 'boolean'); //true
alert(typeof(0) === 'number'); //true
alert(typeof("") === 'string'); //true
alert(typeof(null) === 'object'); //true
alert(typeof undefined === 'undefined'); //true
二、互等性
alert(false == undefined); //false
alert(false == null); //false
alert(null == undefined); //true
alert(false == 0); //true
alert(false == ""); //true
alert(0 == ""); //true
你会发现, 只有0和空字符串等于false;undefined和null对象并不等于false对象,而null和undefined是相等的。
我们可以把0、空字符串和false归为一类,称为"假值";把null和undefined归为一类,称为"空值"。假值还算一个有效的对象,因此可以对其使用toString等类型相关的方法,而空值则不行,会抛出异常。
三、假值和空值作为if条件分支
假值和空值有一个共性,那就是在 作为if的条件分支时,均被视为false ;应用"!"操作之后得到的均为true 。
这是因为,这几个对象均被视为各自类型中的无效值或空值。因此if分支中这些对象均被视为false对待。
四、null和undefined的区别
undefined和null对象无非是两个特殊对象,undefined表示无效对象,null表示空对象。
你可以简单理解为:null起码是个对象,虽然里边什么也没有,但是undefined啥都不是,只是声明了但是没有初始化。
alert(1+undefined); //NaN
alert(1+null); //1
所以上面一段代码也好理解了,1与一个都不知道是什么的东西相加必然是NaN,而1与一个空的对象相加还是1。