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

2024-01-31 10:12

本文主要是介绍【JavaScript 漫游】【003】typeof null 返回 object 的原因,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

img
文章简介

本文为【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 种:

js_object_二进制存储
第一种,0-2 位都是0,typeof 判断类型为 object。

js_number-int_二进制存储
第二种,第 0 位是1,1、2 位是0,判断类型为 number(整数)。

js_number-float_二进制存储
第三种,第 1 位是1,0、2 位是0,判断类型为 number(浮点数)。

在这里插入图片描述
第四种,第 2 位是1,0、1 位是0,判断类型为 string。

在这里插入图片描述

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

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

这篇关于【JavaScript 漫游】【003】typeof null 返回 object 的原因的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/663420

相关文章

Spring IOC的三种实现方式详解

《SpringIOC的三种实现方式详解》:本文主要介绍SpringIOC的三种实现方式,在Spring框架中,IOC通过依赖注入来实现,而依赖注入主要有三种实现方式,构造器注入、Setter注入... 目录1. 构造器注入(Cons编程tructor Injection)2. Setter注入(Setter

Java function函数式接口的使用方法与实例

《Javafunction函数式接口的使用方法与实例》:本文主要介绍Javafunction函数式接口的使用方法与实例,函数式接口如一支未完成的诗篇,用Lambda表达式作韵脚,将代码的机械美感... 目录引言-当代码遇见诗性一、函数式接口的生物学解构1.1 函数式接口的基因密码1.2 六大核心接口的形态学

Spring IOC控制反转的实现解析

《SpringIOC控制反转的实现解析》:本文主要介绍SpringIOC控制反转的实现,IOC是Spring的核心思想之一,它通过将对象的创建、依赖注入和生命周期管理交给容器来实现解耦,使开发者... 目录1. IOC的基本概念1.1 什么是IOC1.2 IOC与DI的关系2. IOC的设计目标3. IOC

Spring Boot统一异常拦截实践指南(最新推荐)

《SpringBoot统一异常拦截实践指南(最新推荐)》本文介绍了SpringBoot中统一异常处理的重要性及实现方案,包括使用`@ControllerAdvice`和`@ExceptionHand... 目录Spring Boot统一异常拦截实践指南一、为什么需要统一异常处理二、核心实现方案1. 基础组件

java中的HashSet与 == 和 equals的区别示例解析

《java中的HashSet与==和equals的区别示例解析》HashSet是Java中基于哈希表实现的集合类,特点包括:元素唯一、无序和可包含null,本文给大家介绍java中的HashSe... 目录什么是HashSetHashSet 的主要特点是HashSet 的常用方法hasSet存储为啥是无序的

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决Spring运行时报错:Consider defining a bean of type ‘xxx.xxx.xxx.Xxx‘ in your configuration

《解决Spring运行时报错:Considerdefiningabeanoftype‘xxx.xxx.xxx.Xxx‘inyourconfiguration》该文章主要讲述了在使用S... 目录问题分析解决方案总结问题Description:Parameter 0 of constructor in x

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添