【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

相关文章

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

Java.lang.InterruptedException被中止异常的原因及解决方案

《Java.lang.InterruptedException被中止异常的原因及解决方案》Java.lang.InterruptedException是线程被中断时抛出的异常,用于协作停止执行,常见于... 目录报错问题报错原因解决方法Java.lang.InterruptedException 是 Jav

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

最新Spring Security的基于内存用户认证方式

《最新SpringSecurity的基于内存用户认证方式》本文讲解SpringSecurity内存认证配置,适用于开发、测试等场景,通过代码创建用户及权限管理,支持密码加密,虽简单但不持久化,生产环... 目录1. 前言2. 因何选择内存认证?3. 基础配置实战❶ 创建Spring Security配置文件

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、