学过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..
网友评论