总结

  • 基础类型(7 种)number, string, boolean, null, undefined, symbol, bigint
  • 引用类型(对象及其子类)object, array, function, date, regexp, map, set

判断方式推荐:

  • 基础类型:使用 typeof
  • 引用类型:使用 instanceofObject.prototype.toString.call()

最佳实践:使用 Object.prototype.toString.call(value) 实现最通用的类型判断逻辑。


一、JavaScript 中的数据类型分类

JavaScript 的数据类型可以分为 基础类型(Primitive Types)引用类型(Reference Types)

1. 基础数据类型(Primitive Types)

类型描述
number表示数字,包括整数、浮点数,如 42, 3.14
string表示字符串,如 "hello"
boolean表示布尔值,只有 truefalse
null表示空值,常用于表示“无”或“空对象引用”
undefined表示未定义的值,变量声明但未赋值时为 undefined
symbol表示唯一的、不可变的值,用于对象属性的键
bigint表示任意精度的整数(ES2020 引入),如 123456789012345678901234567890n

⚠️ 注意:typeof null 返回 "object",这是一个历史遗留的 bug。

2. 引用数据类型(Reference Types)

引用类型是对象(object)的子类型,存储的是对值的引用(内存地址)。

类型描述
object普通对象,如 { name: "Tom" }
array数组对象,如 [1, 2, 3]
function函数对象,如 function foo() {}
date日期对象,如 new Date()
regexp正则表达式对象,如 /^\d+/
map, set, weakmap, weaksetES6 引入的集合类型

二、如何判断数据类型?

1. typeof 运算符

适用于判断基础类型(除 null 外):

typeof 42; // "number"
typeof "hello"; // "string"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof Symbol(); // "symbol"
typeof 123n; // "bigint"
typeof null; // "object" ❌(错误)

2. instanceof 运算符

用于判断引用类型:

[] instanceof Array;       // true
{} instanceof Object;      // true
function() {} instanceof Function; // true
new Date() instanceof Date; // true

3. Object.prototype.toString.call()

适用于判断所有类型,是最准确的方式:

Object.prototype.toString.call(42); // "[object Number]"
Object.prototype.toString.call("hello"); // "[object String]"
Object.prototype.toString.call(true); // "[object Boolean]"
Object.prototype.toString.call(null); // "[object Null]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(Symbol()); // "[object Symbol]"
Object.prototype.toString.call(123n); // "[object BigInt]"
Object.prototype.toString.call([]); // "[object Array]"
Object.prototype.toString.call(new Date()); // "[object Date]"
Object.prototype.toString.call(function () {}); // "[object Function]"

三、常见误区与注意事项

问题说明
typeof null === "object"历史 bug,应使用 === null 判断
typeof [1,2,3] === "object"无法区分数组和其他对象,应使用 Array.isArray()
NaN 的类型是 numbertypeof NaN === "number",但它是非数值的
function 是对象,但 typeof 返回 "function"特殊处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917687.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917687.shtml
英文地址,请注明出处:http://en.pswp.cn/news/917687.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pipeline方法关系抽取--课堂笔记

Pipeline方法课堂笔记 一、Pipeline方法原理 pipeline方法是指在实体识别已经完成的基础上再进行实体之间关系的抽取. pipeline方法流程: 先对输入的句子进行实体抽取,将识别出的实体分别组合;然后再进行关系分类. 注意:这两个子过…

linux系统离线环境安装clickhouse客户端

1、下载离线安装包: 方式1:网站直接下载 链接:https://packagecloud.io/altinity/clickhouse 注意要下载同一版本的四个包 方式2:夸克网盘分享 链接:https://pan.quark.cn/s/7e77e6a1bc5f 2、将本地下载的安装包上传…

GPT-5的诞生之痛:AI帝国的现实危机

目录 前言 一、“俄里翁”的陨落:一场梦碎的代际飞跃 二、扎克伯格的“抄家式”突袭 三、天才的诅咒:当AI聪明到无法与我们对话 四、烧钱的无底洞与微软的影子 结语:AI帝国的黄昏,还是黎明前的黑暗? &#x1f3a…

探索设计模式的宝库:Java-Design-Patterns

在软件开发领域,设计模式是解决常见问题的经典方案,它们如同建筑师的蓝图,为开发者提供了经过验证的最佳实践。今天我要向大家介绍一个GitHub上的明星项目——java-design-patterns,这是一个全面、实用且持续更新的设计模式宝藏项…

JavaScript中的作用域、闭包、定时器 由浅入深

1. JavaScript中的作用域是什么? 作用域(Scope)是程序中定义变量的区域,它决定了变量的可访问性(可见性)。在JavaScript中,作用域主要分为三种:全局作用域、函数作用域和块级作用域&…

仓库管理系统-11-前端之头部区域Header的用户登录和退出功能

文章目录 1 登录功能 1.1 登录页面(Login.vue) 1.1.1 页面布局 1.1.2 初始化数据 1.1.3 confirm方法 1.1.4 UserController.java(登录接口) 1.1.5 Login.vue 1.2 登录页面的路由 1.2.1 创建路由文件(router/index.js) 1.2.2 注册路由器(main.js) 1.2.3 路由视图(App.vue) 2 退出…

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…

飞算科技:以自主创新引领数字科技浪潮,飞算JavaAI赋能产业智能化升级

技术创新已成为企业突破瓶颈、实现跨越式发展的核心驱动力。作为国家级高新技术企业,飞算数智科技(深圳)有限公司(简称“飞算科技”)凭借其深厚的互联网科技、大数据与人工智能技术积淀,以及在民生产业、中…

51单片机按键复位电路电压随着电容放电升高的分析

一、引言在单片机系统中,复位电路是一个至关重要的组成部分,它确保了单片机在特定情况下能够恢复到初始状态,从而避免程序运行错误或系统崩溃。对于51单片机而言,按键复位电路是一种常用的复位方式,它通过手动按下复位…

JVM学习日记(十五)Day15——性能监控与调优(二)

好了我们这一篇继续来说命令行监控指令,上一篇说了4个比较重要的指令,其中用的比较多的也就是jstat和jmap了。 jhat:堆转储分析工具 他是JDK自带的分析工具,分析我们上一篇说的jmap转存的内存快照,​​内置了一个微型…

Docker国内镜像列表

Docker 镜像源列表(8月3日更新-长期&免费)_docker国内镜像源-CSDN博客

Orange AI 管理平台单体版安装教程(Docker Compose 部署)

Orange AI 管理平台单体版安装教程(Docker Compose 部署) 本文介绍如何通过 Docker Compose 快速安装 Orange AI 管理平台单体版,适用于本地开发和测试环境。步骤简单,适合初学者和有一定运维经验的用户。 一、环境准备 已安装 …

PHP的魔术方法

一、介绍 ‌PHP魔术方法是以双下划线__开头的一组特殊方法,用于在对象生命周期、属性访问、方法调用等场景中实现自动化操作。‌简化面向对象编程。 二、17个现有的魔术方法 (一)、对象生命周期相关 1、__construct() 类的构造函数方法&a…

vue2实现类似chatgpt和deepseek的AI对话流打字机效果,实现多模型同时对话

实现多模型同时对话功能特点:1、抽离对话框成单独组件ChatBox.vue,在新增模型对比窗口时可重复利用2、通过sse与后台实时数据流,通过定时器实现打字效果3、适应深度思考内容输出,可点击展开与闭合4、可配置模型参数,本…

电脑上不了网怎么办?【图文详解】wifi有网络但是电脑连不上网?网络设置

一、问题背景 你有没有遇到过这种情况:电脑右下角的网络图标明明显示连接正常,可打开浏览器就是加载不出网页,聊天软件也刷不出新消息? 这种 "网络已连接但无法上网" 的问题特别常见,既不是没插网线&#xf…

思途Spring学习 0804

SpringBoot 核心概念与开发实践SpringBoot 是一个基于 Spring 框架的快速开发脚手架,通过约定大于配置的原则简化了传统 Spring 应用的初始化配置。其核心目标是整合 Spring 生态(如 SSM)并支持微服务架构开发。控制反转(IoC&…

Hutool工具类:Java开发必备神器

Hutool工具类使用说明Hutool是一个Java工具类库,提供了丰富的功能模块,包括字符串处理、日期时间操作、IO流、加密解密、HTTP客户端等。以下是一些常用模块的具体使用方法。字符串工具(StrUtil)字符串处理是开发中的常见需求&…

Node.js中Buffer的用法

// Buffer 与字符串的转换示例 // Buffer 是 Node.js 中用于处理二进制数据的类,字符串与 Buffer 之间的转换是常见操作// 1. 从字节数组创建 Buffer 并转换为字符串 // Buffer.from(array) 接收一个字节数值数组,创建对应的 Buffer let buf_4 Buffer.f…

【Java 基础】Java 源代码加密工具有哪些?

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区:个人社区 💞 个人主页:个人主页 🙉 专栏地址: ✅ Java 中级 🙉八股文专题:剑指大厂,手撕 J…

es的histogram直方图聚合和terms分组聚合

你提到的这两个 Elasticsearch aggs 聚合语句:第一种:histogram 直方图聚合 "aggs": {"DayDiagram": {"histogram": {"field": "${FiledName}","interval": ${TimeInterval},"extende…