js undefined 和 null

来源:互联网 发布:做淘宝客怎么拉微信群 编辑:程序博客网 时间:2024/05/16 12:45

undefined

js是一门弱类型语言,声明变量的时候统一通过varlet关键字。但是即使这是一门弱类型语言它也要分类型。在我们定义一个变量不赋初值的时候,系统是不知道这个变量是什么类型的。

var str;    // undefined

undefined表示的是一个还不知道数据类型的变量。

引用阮一峰大牛的一句话:

1995年JavaScript诞生时,最初像Java一样,只设置了null作为表示”无”的值。

但是,JavaScript的设计者Brendan Eich,觉得这样做还不够,有两个原因。

首先,null像在Java里一样,被当成一个对象。但是,JavaScript的数据类型分成原始类型(primitive)和合成类型(complex)两大类,Brendan Eich觉得表示”无”的值最好不是对象。

其次,JavaScript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或者默默地失败。Brendan Eich觉得,如果null自动转为0,很不容易发现错误。

因此,Brendan Eich又设计了一个undefined。

JavaScript的最初版本是这样区分的:null是一个表示”无”的对象,转为数值时为0;undefined是一个表示”无”的原始值,转为数值时为NaN。

null

如果学过其他面向对象语言,肯定知道null是指一个空对象。但是在js中,null不是对象,而是指向空对象的指针

打印typeof null你会发现结果是一个object,这是设计错误,但是因为有很多代码都是基于这个错误去设计的,为了不影响以前的代码,所以这个错误被保留了下来。

console.log(typeof null);   // 'object'

引用知乎一位大牛的一句话:

JS类型值是存在32 BIT 单元里,32位有1-3位表示类型标记位(TYPE TAG),其它位表示真实值。

而表示object的类型标记位(TYPE TAG)正好是低三位都是0
000: object. The data is a reference to an object.

而js里的null 是机器码NULL空指针, (0x00 is most platforms).所以空指针引用 > 加上 对象标记还是0,最终体现的类型还是object。

null是让一个存放对象类型的引用不指向任何对象(没有对象),而null本身不是一个对象

原创粉丝点击