null的小扩展

问题

现在提出我们的问题

console.log(typeof(null));	//object
console.log(null instanceof Object);	//false

认真的想一想,明明typeof(null)输出的是对象,但是使用instanceof操作符检测时,又输出false,这不是矛盾的吗


解答

http://bbs.csdn.net/topics/370040293

原来这涉及到JavaScript早期的规范

Null数据类型只有一个值:null,就像Undefined数据类型只有一个值:undefined。问题出在typeof操作符的定义规范

Type Result

Undefined "undefined"

Null "object"

Boolean "boolean"

Number "number"

String "string"

可以看到,对于Null类型的值(只有null),规范就是定义返回"object"这个字符串。但是本质上Null和Object
不是一个数据类型,null值并不是以Object为原型创建出来的。所以null instanceof Object是false。但从这
里也可以看到,null确实是javascript中用来表示空引用的一个特殊值。使得它不是instanceof Ojbect,而
typeof null是“object”。在语义上也是可以理解的。

posted @ 2016-07-03 22:27  上啊比卡丘  阅读(228)  评论(0编辑  收藏  举报