有关js中的undefined,null,"",0和false的区别详解

JavaScript017

有关js中的undefined,null,"",0和false的区别详解,第1张

理解与区别JavaScript中所有的"空值"和"假值",除了boolean值本身就是true和false这两种情况外,其它数据类型的"空值"主要是undefined和defined这两大类。这些空值的类型分别是:

复制代码代码示例:

typeof(undefined) == 'undefined'

typeof(null) == 'object'

typeof("") == 'string'

typeof(0) == 'number'

typeof(false) == 'boolean'

以上值的共同点:

在if语句中做判断,都会执行false分支。

从广义上来看,这些数值都是其对应数据类型上的无效值或空值。还有这五个值作!运算,结果全为:true。

不同点:

其中undefined和null比较特殊,虽然null的类型是object,但是null不具有任何对象的特性。

并不能执行null.toString()、null.constructor等对象实例的默认调用。

可以这样理解,null和undefined有最大的相似性。看看null == undefined的结果(true)也就更加能说明这点。不过相似归相似,还是有区别的,就是和数字运算时,10 + null结果为:10;10 + undefined结果为:NaN。

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

注意:区分这些值,主要在于转换为String时的差异是比较大的,它们到String的转换关系是:

复制代码代码示例:

String(undefined) ->"undefined"

String(null) ->"null"

String("") ->""

String(0) ->"0"

String(false) ->"false"

这个转换关系在做字符串累加时,需要特别的注意。

否这会出些意想不到的问题,比如可能会遇到null被默认转为"null"的情况,搞的你相当的迷糊。

假:var a=0

var c=''

var d=null

var e=undefined

真:var f=[]

var g={}

var h=function(){}

var b='0'

一、js中的数字0就是false,非0为true,!表示取反。所以:!0--false取反--true;!!0--false双重取反--false;!1--true取反--false;!!1--双重取反--true;!-1--true取反--false!!-1--true双重取反--true。二、==和===:==:先检查两个操作数数据类型,如果相同,则进行===比较,如果不同,则愿意为你进行一次类型转换,转换成相同类型后再进行比较;===:如果类型不同,直接就是false。具体比较过程:1、双等号==: (1)如果两个值类型相同,再进行三个等号(===)的比较。(2)如果两个值类型不同,也有可能相等,需根据以下规则进行类型转换在比较:如果一个是null,一个是undefined,那么相等。如果一个是字符串,一个是数值,把字符串转换成数值之后再进行比较。2、 三等号===:(1)如果类型不同,就一定不相等。(2)如果两个都是数值,并且是同一个值,那么相等;如果其中至少一个是NaN,那么不相等。(判断一个值是否是NaN,只能使用isNaN()来判断)。(3)如果两个都是字符串,每个位置的字符都一样,那么相等,否则不相等。如果两个值都是true,或是false,那么相等。如果两个值都引用同一个对象或是函数,那么相等,否则不相等。如果两个值都是null,或是undefined,那么相等。扩展资料:在js做比较的时候,有这样的三条规则:1、如果比较的两者中有bool,会把bool先转换为对应的number,即0和1。2、如果比较的双方中有一方为number一方为string,会把string转换为数字。3、把string直接转换为bool的时候,空字符串‘'转换为false,除此外的一字符串转换为true。参考资料:百度百科--比较运算符