美文网首页
javascript 的undefined和null

javascript 的undefined和null

作者: 爱看历史与书的程序猫 | 来源:发表于2017-08-02 15:01 被阅读0次

学过java的同志们肯定都知道,null代表的是空,而且null可以自动的转化为false;

但是在js中。我们除了有undefined,还有null,,对于表达空,应该只有null才对,后来百度的时候明白了

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

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

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

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

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

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

传送门:http://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html

对于null还有undefined的解释是这样的:

Undefined类型只有一个值,即undefined。当声明的变量还未被初始化时,变量的默认值为undefined。

Null类型也只有一个值,即null。null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。

对于undefined,他的意思是缺省值,指的是未被初始化的值,比如

var a;

console.log(a);

打印出来的,就是undefined了,这段代码显示为true,代表oVlaue的值即为undefined,因为我们没有初始化它。

对于null,请注意,他表示的对象,比如我们的dom对象。下方例句:

console.log(document.getElementById("aaa"))

这是一个对象,所以我们打印出来的就是null了

undefined与null的类型

使用下常用的typeof。我们可以看下这两者返回的是什么类别

console.log(typeof(mk1));

console.log(typeof(document.getElementById("aaa")))

最终的结果,undefined返回的类别是undefined,但是null返回的类别确实object??

很是奇怪对吧,对于undefined可以理解,但是为社么null是object呢?

其实这是js里面的一个bug,有很多种说法,这也许侧面反映js是设计很差的语言

我比较欣赏的一种是:

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

而表示object的标记位正好是低三位都是0

000: object. The data is a reference to an object.

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

这也就是为什么Number(null)===0吧...

相关文章

网友评论

      本文标题:javascript 的undefined和null

      本文链接:https://www.haomeiwen.com/subject/iizelxtx.html