日度归档:2013 年 11 月 11 日

Javascript null和undefined

Javascript的数据类型包括数字、字符串、布尔值、null、undefined和对象。其中null和undefined是两种特殊的原始类型,很容易混淆。今天就来剖析一下null和undefined这两种数据特殊类型的区别。

null

null是Javascript的关键字,它通常用来描述空值

可以看出null是一个特殊的对象,含义是“非对象”。可以认为null是它自有类型的唯一一个成员,它可以表示数字、字符串、对象是“无值”的。因为null没有其他属性和方法了,比如说执行null.length,会报错:TypeError: Cannot read property ‘length’ of null。

null 参与数值运算时其值会自动转换为 0 ,因此,下列表达式计算后会得到正确的数值:

undefined

undefined不是Javascript的关键字。undefined用未定义的值表示更深层次的“空值”。它是变量的一种取值,表面变量没有初始化。如果要查询对象属性或数组元素的值时返回undefined,说明这个属性或元素不存在。如果函数没有返回值,则返回undefined。引用没有提供实参的函数,函数形参的值也只会是undefined。在ECMAScript5中,undefined是只读的。typeof undefined,会返回“undefined”,表明“undefined”是这个类型的唯一成员。

尽管null和undefined是不同的,但它们都表示“值的空缺”,两者往往可以互换。

关于Javascript我还遇到一个有意思的现象:

第一句比较怪异。原因是这样的,“==”是松散比较,也就是说如果比较的双方类型不一致,Javascript会先把它们转成同一类型,再做严格比较。如果双方中有一个为数字类型或布尔类型,则javascript会将它们转成数字类型或布尔类型,如果双方中有string类型而没有数值类型或布尔类型,则会把不是string类型强制转换为string类型。这段代码的第一句,比较双方是””和0,””会被强制转成Number型0,所以“” == 0,返回true。

参考:

《JavaScript权威指南》44-45页

区分JS中的undefined,null,””,0和false

http://www.cnblogs.com/birdshome/archive/2005/03/04/111991.html

解剖JavaScript中的null和undefined

http://blog.csdn.net/leadzen/article/details/3899392

stackoverflow

http://stackoverflow.com/questions/12422064/why-javascript-treats-0-equal-to-empty-string