JavaScript 数据类型与数据结构详解

作者:异步漫步

时间:2026-10-24

浏览:74

本文深入解析 JavaScript 的 8 种数据类型,涵盖 undefined、Boolean、Number、String、BigInt、Symbol 及 Object。重点讲解动态类型特性、原始值的不可变性以及 typeof 与 instanceof 在类型检查中的区别与应用,帮助开发者准确理解 JS 基础结构。

文章目录

1. 什么是动态类型

  • JavaScript 被归类为弱类型或动态语言。
  • 在编写代码时,无需预先声明变量的具体类型,系统会在程序运行期间自动推断并确定类型。
  • 这种机制允许同一个变量在不同时刻存储不同类型的数据。

let a;     // 初始不给任何类型
a = 11;    // a此时是number类型
a = "二大爷"; // a 变成了字符串类型
a = true;  // a 变成了布尔类型

尽管语法上允许这样做,但在实际工程开发中并不推荐频繁改变变量类型,因为这可能导致难以预料的逻辑错误。

  • 例如,假设一个变量原本存储的是男性身份,随后被赋值为女性身份,这种类型的剧烈转换可能引发业务逻辑混乱。
  • 或者,原本代表女性角色的变量突然被赋予男性身份,同样会造成数据语义的冲突。
  • 再比如,涉及敏感关系的变量类型发生不可控的突变,可能导致程序状态异常。
  • …
  • 因此,一旦变量的数据类型被确定,建议保持其稳定性,避免随意篡改。

1. 什么是动态类型 

2. 数据类型分类

  • 许多人可能仍认为 JavaScript 仅包含 6 种数据类型,这是一种过时的认知。
  • 根据最新的 ECMAScript 标准,JavaScript 共定义了 8 种数据类型。

2.1 原始类型(共 6 种,可通过 typeof 运算符进行检测)

  • undefined:通过 typeof instance === “undefined” 进行判断。
  • Boolean:通过 typeof instance === “boolean” 进行判断。
  • Number:通过 typeof instance === “number” 进行判断。
  • String:通过 typeof instance === "string" 进行判断。
  • BigInt:通过 typeof instance === “bigint” 进行判断,用于表示任意精度的整数。
  • Symbol:通过 typeof instance === “symbol” 进行判断。

2.2 null 与 Object

  • null:通过 typeof instance === “object” 进行判断(这是语言设计的历史遗留问题)。
  • 对于通过构造函数创建的对象实例,typeof 同样返回 “object”。
  • 所有通过 new 关键字创建的对象实例,如 new Object、new Array、new Map、new Set、new WeakMap、new WeakSet、new Date 等,均属于特殊非数据结构类型,同时也作为数据结构使用。

2.3 typeof 操作符的关键说明

  • typeof 操作符的主要功能是检查值的基本类型。
  • 若需检测从 Object 派生的具体结构类型,typeof 无法提供准确结果,因为它对所有对象类型均返回 “object”。
  • 要检查 Object 的具体种类(如数组、日期等),应使用 instanceof 关键字。然而,即使使用 instanceof,在某些跨窗口或复杂场景下仍存在误差,目前尚无百分之百完美的类型检测方法。

1. 什么是动态类型

3. 原始值详解

3.1 原始值基本概念

  • 除 Object 以外的所有类型均为不可变类型,即值本身无法被修改。
  • 与 C 语言不同,JavaScript 中的字符串是不可变的。对字符串执行任何操作都会返回一个新字符串,而原始字符串保持不变,这类值被称为“原始值”。

3.2 各类型具体说明

  • 布尔类型(Boolean):表示逻辑实体,仅有两个值:true 和 false。
  • Null 类型:仅有一个值 null,表示“空”或“无”。
  • Undefined 类型:未赋值的变量默认具有 undefined 值。
  • Number 类型:JavaScript 未像 Java 那样细分整数和浮点数类型,统一使用 Number。此外还包括特殊值:+Infinity、-Infinity 和 NaN(Not-a-Number,非数值)。
  • BigInt 类型:JavaScript 中的基础数值类型,支持任意精度的整数运算。它可以安全地存储和操作超过安全整数限制的大整数。BigInt 可通过在整数末尾添加 n 或使用构造函数创建。

语法:BigInt(value);

value:创建 BigInt 对象所需的数值,可以是字符串或整数。

注意:BigInt() 不是构造函数,因此不能使用 new 操作符来创建 BigInt 实例。

  • String 类型:字符串是不可变的。创建后无法修改原字符串,但可以通过对原始字符串的操作生成新字符串。

获取子串可通过选取特定字符或使用 String.substr() 方法实现。

字符串连接可使用连接操作符 (+) 或 String.concat() 方法完成。

  • Symbols 类型:唯一且不可修改,常用作 Object 的键名,确保属性名的唯一性。
  • Object 类型:对象可视为一组属性的集合。使用对象字面量语法定义对象时,会自动初始化一组属性。

属性的值可以是任意类型,包括具有复杂数据结构的其他对象。属性通过键标识,键可以是字符串或符号值(Symbol)。

以上内容详细解析了 JavaScript 的数据类型与数据结构,更多关于 JS 数据类型与数据结构的资料请关注本站其它相关文章!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章