下班吃饭的时候,同事偶然问了1个问题:undefined和null到底有甚么区分?没法回答,回去查阅相干资料,算了有了1个了解,做相干的总结,在开始之前,请看以下代码,算是抛出这个问题:
上述结果可以给我们1个这样的理解: undefined和null两个值相等,但是他们含义不同。具体二者有甚么区分,先理解下undefined和null在做分析。
undefined类型只有1个值,即特殊的undefined。在使用var声明变量但未对其加以初始化,这个变量的值就是undefined。例如:
上面两种写法是等价的,未经初始化的值默许就会获得undefined值。
Tips:1般而言不需要显示的把1个变量设置为undefined,undefined的主要目的在于比较,ECMA第3版引入这个值正是为了辨别空对象指针null和未经初始化的变量
既然谈到了null,这里在多补充1点,对为初始化的变量履行typeof返回undefined值,对为声明的变量履行typeof也会返回undefined值,以下例子:
这个结果有逻辑上的公道性,虽然null和undefined在技术角度上有本质区分,但是实际中不可能对两种变量进行操作。在这类情况下如果我们习惯声明变量就进行初始化的时候,当typeof操作符返回“undefined”值时,我们就知道有变量还没有被声明,而不是还没有初始化。
null类型也是只有1个值null,从逻辑角度来看,null值表示1个空对象指针,不信?看以下代码就知道了:
所以在变量是用于保存对象时,最后将之初始化为null,可以很方便的知道变量是不是保存了1个对象的援用。
分别的了解了这两种类型,到这里似乎有所理解,但又不具体。回到最初抛出的问题,在ECMAScript的原始类型中,是有undefined和null类型的,这两种类型分别对应了属于自己的唯1值undefined和null。undefined实际上是从null派生而来,这就能够解释undefined==null为true了。
就undefined===null为false分两个方面来理解:
很明显,他们的地址分配不1样,我想着对有后端基础的同学来讲很容易理解,具体以下图:
虽然undefined==null为true,但是他们的用处是不1样的。就像前面所述,不管甚么情况都没有必要将1个变量值显示的指定为undefined,默许值为undefined,但是默许的规则对null却不适用。由于null表示没有指向对象的援用。
总的来讲,undefined派生于null,他们是“=="的,另外一层面上undefined表示没有赋值的基本数据类型,null表示没有赋值的援用数据类型,他们不能“===”。
下一篇 计算机图形学中的常用模型