【JavaScript 漫游】【003】typeof null 返回 object 的原因

【JavaScript 漫游】【003】typeof null 返回 object 的原因_第1张图片
文章简介

本文为【JavaScript 专栏】的第 003 篇文章。

在上篇文章中,笔者简单记录了 typeof 运算符对 ES5 各数据类型的判断结果。其中,nullarrayobject 都判断为 object 类型。array 作为广义 object 的子类型,返回 object 尚可理解,但为何 null 会返回 object 呢?怀着这样的疑问,笔者于本文记录 typeof null 返回 object 的原因。

array 是一种特殊的 object,它的键名都是整数

typeof null === ‘object’ 的原因

null 的类型是 object,这是由于历史原因造成的。

1995 年的 JS 语言第一版,只设计了五种数据类型:number(整数)、number(浮点数)、string、boolean 和 object。null 仅视为 object 的一种特殊值。

在第一版中,单个值在栈中占用 32 位的存储单元,而这 32 位的存储单元又可以划分为类型标签(0-2位)和实际数据,类型标签存储于低位中,具体可以分为 5 种:

【JavaScript 漫游】【003】typeof null 返回 object 的原因_第2张图片
第一种,0-2 位都是0,typeof 判断类型为 object。

【JavaScript 漫游】【003】typeof null 返回 object 的原因_第3张图片
第二种,第 0 位是1,1、2 位是0,判断类型为 number(整数)。

【JavaScript 漫游】【003】typeof null 返回 object 的原因_第4张图片
第三种,第 1 位是1,0、2 位是0,判断类型为 number(浮点数)。

【JavaScript 漫游】【003】typeof null 返回 object 的原因_第5张图片
第四种,第 2 位是1,0、1 位是0,判断类型为 string。

【JavaScript 漫游】【003】typeof null 返回 object 的原因_第6张图片

第五种,第 1、2 位都是1,第 0 位是0,判断类型为 boolean。

由于 null 的第 0-31 位都是 0,符合第 0-2 位都是 0 的情况,所以 typeof 判断 null 为 object。

你可能感兴趣的:(JavaScript,漫游,javascript,前端)