ECMAScriptJavaScript中null和undefined

   
JavaScript的数据类型大体分为两类:原始类型和对象类型。当中,原始类型包含数字、字符串和布尔值。其余,JavaScript中还有五个独特的原始值:null(空)和undefined(未定义),它们不是数字、字符串和布尔值,它们平日分别代表个别独特类别中唯一的积极分子。

null

   
null是JavaScript语言的主要性字,它代表贰个非同一般值,常用来描述“空值”。对null执行typeof预算,结果重返字符串“object”(如下图),所以说,也足以将null认为是贰个相当的靶子值,它的意义是“非对象”。但实际,平常认为null是它自有品种的绝无仅有的3个分子,它能够代表数字、字符串、对象是“无值”的。

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 )

举例说Bellamy(Bellamy)(Dumex)下:

ECMAScript 3

 

if语句中,null举例表达

ECMAScript 4

if语句中,undefined举例表明

ECMAScript 5

null和undefined区别

    null和undefined基本是同一的,唯有一部分细小的差距。

壹 、null是几个意味着“没有”的对象,转为数值时为0;undefined是二个表示”未定义”的原始值,转为数值时为NaN。

ECMAScript 6

二 、null表示“没有目的”,即该处不该有值。undefined表示”缺乏值”,正是此处应该有二个值,可是还尚无概念。

③ 、null和undefined通过typeof判断出的结果差别等。

ECMAScript 7

备考:有资料显示,typeof的那种表现早就被认同为二个破绽百出,即便建议了校订,出于后至极的指标,那或多或少曾经维持不变。

 

扩展:

    在ECMAScript
3中,undefined是可读/写的变量,能够给它赋任意值。这么些破绽百出在ECMAScript
5中做了校订,undefined在该版本中是只读的。

    null常常被用来显式地钦点变量为无效(object=
null)当三个引用不再是要求的,通过分配null值,有效地扫除引用,并要是对象没有引用别的代码,钦定垃圾收集,确定保证回收内部存款和储蓄器。有时也会在概念变量时,初步化为null;

   
undefined很少大概说不提出用在其余地点,undefined平日晤面世在众多的点子代码中。平常遭受当试图访问两个不存在的值时,只会暗中同意重临三个undefined值,而不是稳中有升为1个谬误。
任何注脚变量时并未提供八个先河值,都会有三个为undefined的默许值。

ECMAScript 8

小结:能够把undefined认为是代表系统级的、突出其来的、也许是相仿错误的值的空缺,而null是意味程序级的、平时的或在预料之中的值的空缺。假使想把它们赋值给变量大概性质,或将它们当做参数传入函数,最佳选项是应用null。