当前位置: 首页 > news >正文

2. JS 有哪些数据类型

总结

  • 基础类型(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.lryc.cn/news/610941.html

相关文章:

  • 基于Redis实现短信登录
  • 【CTF】命令注入绕过技术专题:变量比较与逻辑运算
  • Redis Stream:高性能消息队列核心原理揭秘
  • 【OSCP】- eLection 靶机学习
  • 基于ARM+FPGA光栅数据采集卡设计
  • Electron-updater + Electron-builder + IIS + NSIS + Blockmap 完整增量更新方案
  • GPT-1、GPT-2、GPT-3 的区别和联系
  • 7、Redis队列Stream和单线程及多线程模型
  • 人工智能领域、图欧科技、IMYAI智能助手2025年4月更新月报
  • 【RK3576】【Android14】Uboot下fastboot命令支持
  • 创维智能融合终端DT741_移动版_S905L3芯片_安卓9_线刷固件包
  • CTF-XXE 漏洞解题思路总结
  • 测试开发:Python+Django实现接口测试工具
  • Python-初学openCV——图像预处理(七)——亮度变换、形态学变换
  • ThingsKit Edge是什么?
  • 从零实现富文本编辑器#6-浏览器选区与编辑器选区模型同步
  • 数据结构 | 树的秘密
  • 在Linux上部署tomcat、nginx
  • CRT调试堆检测:从原理到实战的资源泄漏排查指南
  • Apifox使用mock模仿后端返回数据
  • JumpServer 堡垒机全流程搭建指南及常见问题解决方案
  • Redis存储string里面embstr和raw格式区别
  • 【Linux】特效爆满的Vim的配置方法 and make/Makefile原理
  • 【01】OpenCV C++实战篇——基于多项式插值的亚像素边缘定位算法
  • Occ3D: A Large-Scale 3D Occupancy Prediction Benchmark for Autonomous Driving
  • Python爬虫实战:研究weiboSpider技术,构建新浪微博数据采集系统
  • 多层Model更新多层ListView
  • RHCA05--进程管理与文件系统管理
  • 数据结构(01)—— 数据结构的基本概念
  • 应用科普 | 漫谈6G通信的未来