JavaScript 中的数据类型中明明null是基础数据类型 为什么typeof 结果是object

JavaScript有六个原始数据类型,包括Number、String、Symbol、Boolean、Undefined和Null。当使用typeof操作符时,null虽然被视为基本类型,但返回值却是'object',这是JavaScript历史遗留的bug。ES6中曾考虑修复,但提议未通过,使得typeofnull成为了一个特性。这个现象源于JavaScript内部数据存储和类型判断的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JavaScript中都知道有6个简单数据类型(也叫做原始类型)

1.Number 数字类型

2.String 字符串类型

3. symbol 符号类型 (ECMAScript6新增)

4.Boolean 布尔类型

5. Undefined 未定义

6.Null 空

对象Object 是复杂数据类型

<script>
        let bar
        console.log(typeof bar)  //undefined
        bar = 12
        console.log(typeof bar) //number
        bar = " 我是字符串 "
        console.log(typeof bar)//string
        bar = true
        console.log(typeof bar) //boolean
        bar = null
        console.log(typeof bar) //object
        bar = { name: "我是一个对象" }
        console.log(typeof bar) //object
</script>

然而当我们调用 typeof(null) 返回的值却是object

所以常常有人对此混淆不清

null本身实际上是基本类型,但是JavaScript在存储数据的时候,会把不同的对象在底层存储的时候都转为二进制,

而JavaScript判断数据类型的时候根据 数据的二进制判断,如果二进制的前三位都为0就会被判断为object.

但是null代表的是空,所以存储的表示形式是全为0,前三位肯定也为0 因此执行typeof时会返回object

这个bug是第一版Javascript留下来的。在这个版本,数值是以32字节存储的,由标志位(1~3个字节)和数值组成。标志位存储的是低位的数据

。 这里有五种标志位:

(1) 000:对象,数据是对象的应用。

(2) 1:整型,数据是31位带符号整数。

(3) 010:浮点数。

(4) 100:字符串,数据是字符串。

(5) 110:布尔类型,数据是布尔值。

有二个值比较特别

undefined:用 (-2^{30})表示.

null :对应机器码的  NULL  指针 ,一般是全零

在 ES6 中曾有关于修复此 bug 的提议,提议中称应该让 typeofnull==='null'  但是该提议被无情的否决了,自此 typeofnull 终于不再是一个 bug,而是一个 特点,并且永远不会被修复。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值