js undefined 和 null

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本身不是一个对象

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值