区分JS中的undefined,null,"",0,false

总是被JS中的undefined,null,"",0和false耍的晕头转向,索性把它们汇总起来总一个比较。

这几个家伙都是JavaScript中的"空值"和"假值",除了boolean值本身就是true和false这两种情况外,其它数据类型的"空值"主要是undefined和defined这两大类。这些空值的类型分别是

 typeof(undefined) == 'undefined'
 typeof(null) == 'object'
 typeof("") == 'string'
 typeof(0) == 'number'
 typeof(false) == 'boolean'

这些值的比较

值相等的:
alert(0 == ''); //true
alert(0 == false); //true
alert(false == ''); //true
alert(null == undefined); //true
值不等的:
alert(0 == undefined); //false
alert(0 == null); //false
alert(false == null); //false
alert(false == undefined);//false
alert('' == null); //false
alert('' == undefined); //false
这五个值作!运算,结果全为:true
alert(!0); //true
alert(!false); //true
alert(!undefined); //true
alert(!null); //true
alert(!''); //true

 共同点:这五个值作!运算,结果全为:true(说明这些数值都是其对应数据类型上的无效值或空值),在if语句中做判断,都会执行false分支。

 不同点

1、null和undefined:虽然null的类型是object,但是null不具有任何对象的特性,就是说我们并不能执行null.toString()、null.constructor等对象实例的默认调用。null和undefined有最大的相似性,但在数字运算时,3+ null结果为:3;3+ undefined结果为:NaN。

2、" "、0和false虽然在if语句表现为"假值",可它们都是有意义数据,只是被作为了"空值"或"假值",因为:"".toString(),(0).toString()和false.toString()都是合法的可执行表达式。

需要注意的是这些值在转换为String时的差异是比较大的,它们到String的转换关系是:
 String(undefined) -> "undefined"
 String(null) -> "null"
 String("") -> ""
 String(0) -> "0"
 String(false) -> "false"

猜你喜欢

转载自1150404757.iteye.com/blog/2319529