null的小扩展

本文深入探讨了JavaScript中的六种数据类型,重点解析了Undefined、Null等基本数据类型及Object这一复杂数据类型的特点,并通过typeof与instanceof操作符的对比使用,揭示了Null类型的独特性质。

注意:JavaScript有6种数据类型,其中是五种基本数据类型,分别是:Undefined、Null、Boolean、Number
和String,还有一种复杂的数据类型Object

使用typeof操作符可以检测变量的数据类型

比如

typeof(undefined)   //undefined

使用typeof只可以判断基本的数据类型

var obj=[];
console.log(typeof(obj));   //object

所以,对于复杂的数据类型,我们需要用到instanceof操作符来进行判定

var obj=[];
console.log(obj instanceof Array);  //true

问题

现在提出我们的问题

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

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


解答

http://bbs.youkuaiyun.com/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”。在语义上也是可以理解的。

转载于:https://www.cnblogs.com/jelly7723/p/5639017.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值