大多数计算机语言只有一个值,表示否。

Javascript语言有两个值表示否:未定义的和空的,这是有点奇怪的。

一、相似性



在Javascript中,变量被赋值为未定义的或null,老实说,几乎没有区别。


var =未定义;

var = null;




在上面的代码中,变量分别被赋值为未定义的和空的,这两种形式几乎是等价的。

在if语句中,未定义的和空的都自动转换为false,等效操作符甚至报告两个是相等的。


如果(!未定义)
console.log('undefined是虚假的);
是false未定义的

如果(!null)
console.log('null是虚假的);
为false

未定义的=空的
/真




上面的代码显示了两个行为的相似性!



由于未定义和空的含义和用法几乎相同,我们为什么需要同时设置两个值呢这并不是增加Javascript的复杂性,没有任何困难。这是一个麻烦的初学者,眄公司开发的Javascript语言替代飞镖语言是明确定义为空,没有定义!



二、历史原因



最近,当我读到新书说Javascript

原来,这是Javascript的历史有关。当Javascript 1995出生,就像java,只有空是设置为无的价值。

根据C语言的传统,null被设计成自动转换为0。


数字(NULL)
0

5 +空
/ / 5




但布兰登·艾奇,Javascript的设计师,觉得这是不够的,原因有二。



首先,空,如java,被视为一个对象。然而,Javascript的数据类型分为两类:原始类型(原始)和综合型(复杂)。布兰登·艾奇认为无是不是该对象的值。



其次,Javascript的初始版本不包含错误处理机制。当数据类型不匹配,它经常自动转换或失败无声。布兰登·艾奇觉得如果空自动变成0,找到一个错误,这是不容易的。



所以,布兰登·艾奇设计了一个未定义的。



三。原设计



Javascript的原始版本是如此可辨:null是表示否的对象。当它转换为数值时,它是0。未定义是表示否的原始值。


编号(未定义)


5定义





四。目前的使用情况



然而,在实践中,上述差别很快就被证明是不可行的。目前,零和未定义基本上是同义的,只有细微的差别。

NULL表示没有对象的典型用法是:

(1)作为函数的参数,函数的参数不是对象。

(2)对象的原型链的结束。


Object.getPrototypeOf(对象。原型)





未定义的意思是缺乏价值,典型用法是:



(1)声明变量,但是当没有赋值时,它等于未定义。

(2)当调用函数时,不提供应该提供的参数,参数等于未定义的参数。

(3)对象没有赋值属性,其值是未定义的。

(4)当函数不返回值时,默认返回未定义。


var i;
未定义的

函数f(x){ console.log(x)}
(f)未定义的

新对象();
OP / /未定义

var = f();
未定义的




这里有一点摘要。

NULL是表示非对象的Javascript关键字。

未定义没有指示值,表示该值不存在或未初始化。





相同点
差异


自主式独特价值
NULL是一个对象,未定义的是一个保留字。


没有属性和方法
在数学运算中,null被转换为0,在数学运算中,未定义的不能转换或转换成。


= =等于,不相等
无效的!=未定义的 /真


所有都是false值,而布尔变量的值是相同的。

NULL是空对象,未定义的是窗口的属性(但不是对象属性)。




警报(typeof null)/对象(类定义警报 / /定义);