首页 > 技术文章 > null 和 undefined 的区别

enemy 2014-06-08 17:57 原文

    null是javascript的关键字,它用来表示一个特殊值,常用来描述“空值”。对null执行typeof预算,结果返回字符串“object”,也就是说。可以将null认为是一个特殊的对象值,含义是“非对象”。但实际上,通常认为null是它自有类型的唯一一个成员,它可以表示数字,字符串和对象是“无值”的,大多数编程语言和js一样含有null.

   js中还有第二个值表示值得空缺,用未定义的值表示更深层次的“空值”。它是变量的一种取值,表示变量没有初始化,如果要查询对象属性或数组元素的值时返回undefined则说明这个属性或元素不存在。如果函数没有返回任何值,则返回undefined,引用没有提供实参的函数形参的值也只会得到undefined.undefined是预定义的全局变量(它和null不一样,它不是关键字),它的值就是“未定义”。在ECMAScript3中,undefined是可读/写的变量,可以给它赋任意值。这个错误在ECMAScript5中做了修正,undefined在该版本中是只读的。如果使用typeof运算符得到undefined的类型,则返回“undefined”,表明这个值是这个类型的唯一成员,

   尽管null和undefined是不同的,但它们都表示“值的空缺”,两者往往可以互换,判断相等运算符“==”认为两者是相等的(要使用严格相等运算符“===”来区分它们)。在希望值是布尔类型的地方它们的值都是假值,和false类似。null和undefined都不包含任意的属性和方法。实际上,使用“.”和“[]”来存取这两个值的成员或方法都会产生一个类型错误。

以下是测试结果:

根据第一条和第二条输出null和undefined的类型可以得出三四条结论,即null 和undefined值相等都是空值,但是类型不同,所以=== 的时候是false.原理跟五、六条的判断一样123 和‘123’值相等,但是一个是数值类型,一个是字符窜。所以===为false

直接输出一个x会报错,定义了x但未给其赋值。则为undefined,最后一条直接z=null 意思即是定义z是一个object类型,但其内容为空。

根据undefined的意思,在定义的时候给值赋值为undefined是不合理的。最笨的理解方法,undefined本来就表示未定义,但是在定义的时候又给赋值undefined,这样子跟它本来的意思自行矛盾。违背了初衷。如下图会报语法错误。

这样子应该很清楚了,恩。很清楚了:)

推荐阅读