ECMAScriptJavaScript中null和undefined

   
JavaScript的数据类型大体分为两接近:原始类型和对象类型。其中,原始类型包括数字、字符串和布尔值。此外,JavaScript中还有一定量独与众不同之原始值:null(空)和undefined(未定义),它们不是数字、字符串和布尔值,它们通常分别代表分别独特类别受到绝无仅有的分子。

null

   
null是JavaScript语言的显要字,它意味着一个出奇值,常用来讲述“空值”。对null执行typeof预算,结果回到字符串“object”(如下图),所以说,也得以将null认为是一个异的靶子值,它的义是“非对象”。但骨子里,通常认为null是它们自从出项目的唯一的一个分子,它好象征数字、字符串、对象是“无值”的。

ECMAScript 1

undefined

   
undefined也得以就此来表示值的空缺。它和null不雷同,它不是重中之重字,它是变量的一律栽取值,表明变量没有初始化,在查询对象的习性或数组元素的价经常返回undefined,则印证是特性或因素不在。如果函数没有回去外价值,则返回undefined。引用没有提供实参的函数形参的价也只见面获undefined。undefined是预定义的全局变量,它的价值就是“未定义”。

null和undefined相同之处

   
null和undefined都是全不可变的价值,都没性与艺术,也不克叫她添加属性或者赋值(因为她向未曾性能)。如果打算定义一个属性将会晤引发一个种错误(如下图),它们是全然没用的价。

ECMAScript 2

 
在JavaScript中,“没有值”代表的布尔值是false,这象征她们于基准上下文中会给受计算也false,如if语句中。

在意:使用等操作符( ==
)比较及时简单独价与其余false值是无齐的,如果比它们简单单凡是相当的,但是不统等(===),因为品种不均等。

疑问:既然null和undefined在if判断语句被还代表为false,为什么不能够与false值相等呢?

   
用等于(==)操作符将false对象及其余对象进行比较的当儿,会意识,只有0和空字符串等于false;undefined和null对象并不等于false对象,而null和undefined是当的。所以,可以把0、空字符串和false归为同一看似,称为“假值”;把null和undefined归为同近似,称为”空值”。(个人理解:也就是说在JavaScript中,假值和空值都发生一个共性,那就是以当if的尺码分支时,均给视为false
;应用”!”操作之后获得的备为true )

举例说明一下:

ECMAScript 3

 

if语句中,null举例说明

ECMAScript 4

if语句中,undefined举例说明

ECMAScript 5

null和undefined区别

    null和undefined基本是如出一辙的,只发生局部一线之别。

1、null是一个代表“没有”的靶子,转为数值时为0;undefined是一个意味”未定义”的原始值,转为数值时为NaN。

ECMAScript 6

2、null表示“没有对象”,即该处不应有发生价。undefined表示”缺少值”,就是这里应该生出一个价,但是还没有定义。

3、null和undefined通过typeof判断发生之结果ECMAScript未相同。

ECMAScript 7

备考:有资料展示,typeof的这种作为已让肯定为一个破绽百出,虽然提出了更正,出于后相当的目的,这一点已经保持不转移。

 

扩展:

    在ECMAScript
3遇,undefined是可读/写的变量,可以叫其赋任意值。这个错误在ECMAScript
5饱受举行了修正,undefined在该本中是单独念之。

    null经常为用于显式地指定变量为无效(object=
null)当一个引用不再是不可或缺的,通过分配null值,有效地清除引用,并要对象没引用其他代码,指定垃圾收集,确保回收内存。有时也会见当概念变量时,初始化为null;

   
undefined很少或者说勿建议就此当另地方,undefined经常会面面世在许多底法门代码中。通常遇到当试图访问一个不在的价时,只会默认返回一个undefined值,而未是上升也一个左。
任何声明变量时莫提供一个初起值,都见面发一个呢undefined的默认值。

ECMAScript 8

总结:可以将undefined认为是表示系统级的、出乎意料的、或者是看似错误的价值的空缺,而null是代表程序级的、正常的或当预料中的值的空缺。如果想拿它们赋值给变量或者性质,或将她当参数传入函数,最佳选择是采用null。