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

一、相似性
在Javascript中,变量被赋值为未定义的或null,老实说,几乎没有区别。
复制代码代码如下所示:
var =未定义;
var = null;

在上面的代码中,变量分别被赋值为未定义的和空的,这两种形式几乎是等价的。
在if语句中,未定义的和空的都自动转换为false,等效操作符甚至报告两个是相等的。
复制代码代码如下所示:
如果(!未定义)
console.log('undefined是虚假的);
是false未定义的

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

未定义的=空的
/真

上面的代码显示了两个行为的相似性!
由于未定义和空的含义和用法几乎相同,我们为什么需要同时设置两个值呢这并不是增加Javascript的复杂性,没有任何困难。对于初学者来说,这是一个麻烦。谷歌公司开发的Javascript语言的替代飞镖语言明确地定义为null,没有定义!
二、历史原因
最近,当我读到新书说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();
未定义的