JavaScript 数据类型


Key Points

  • JavaScript 数据类型包括基本类型(如 Number、String、Boolean)和引用类型(如 Object)。
  • 基本类型有 Number、String、Boolean、Null、Undefined、Symbol 和 BigInt。
  • 引用类型主要包括 Object,涵盖 Array、Function 等。
  • JavaScript 是动态类型语言,变量类型可在运行时改变。

数据类型分类

JavaScript 的数据类型分为基本数据类型和引用数据类型。基本类型是不可变的,引用类型是可变的。

基本数据类型

  • Number:表示数字,如 123 或 3.14,基于 IEEE 754 标准。
  • String:表示文本,如 “Hello, World!”,不可变。
  • Boolean:表示真假值,true 或 false。
  • Null:表示空对象指针,typeof 返回 “object”。
  • Undefined:表示未定义值,未初始化的变量默认此值。
  • Symbol:ES6 引入,表示唯一值,通常用于对象属性键。
  • BigInt:ES6 引入,表示任意精度整数,处理大数。

引用数据类型

  • Object:键值对集合,如 {name: “John”},包括 Array、Function、RegExp、Date 等。

动态类型特性

JavaScript 允许变量类型动态变化,例如:

let x;
x = 123; // Number
x = "Hello"; // String

调查笔记:JavaScript 数据类型的详细分析

JavaScript 是一种动态类型语言,支持多种数据类型,其分类和特性对开发至关重要。以下是基于多方权威资料的详细分析,确保覆盖所有相关信息。

数据类型的分类与定义

JavaScript 的数据类型主要分为两类:基本数据类型(也称为原始类型)和引用数据类型(对象类型)。基本数据类型的值是不可变的(immutable),而引用数据类型的值是可变的(mutable)。

基本数据类型

根据 MDN Web DocsJavaScript.info菜鸟教程 的信息,基本数据类型包括以下七种(加上 ES6 引入的 BigInt,共八种):

  1. Number(数字):
  • 表示整数和浮点数,例如 123、3.14。
  • 基于 IEEE 754 标准,64 位双精度浮点数。
  • 特殊值包括 Infinity(正无穷大)、-Infinity(负无穷大)和 NaN(非数字)。
  • 安全整数范围为 -(2^53-1) 到 2^53-1,可用 Number.isSafeInteger() 检查。
  • 位运算符会将数字转换为 32 位整数。
  1. String(字符串):
  • 表示文本,例如 “Hello, World!”。
  • 编码为 UTF-16,长度由 UTF-16 代码单元决定。
  • 不可变,方法如 substring()concat() 创建新字符串。
  • 不推荐用于复杂数据,建议使用数组。
  1. Boolean(布尔):
  • 表示真假值,truefalse
  • 用于条件语句,如三元运算符、if…else、while 循环。
  1. Null(空):
  • 唯一值是 null,表示空对象指针。
  • typeof null 返回 “object”,这是 JavaScript 的历史遗留问题,建议用 === null 测试。
  1. Undefined(未定义):
  • 唯一值是 undefined,表示值缺失。
  • 常见于未初始化的变量、缺失的对象属性,或方法如 Array.prototype.find() 未找到元素时返回。
  • 不推荐显式赋值 undefined,通常由语言默认。
  1. Symbol(符号):
  • ES6 引入,表示唯一且不可变的值。
  • 通常用作对象属性的键,避免属性冲突。
  • 也称 “atoms”,typeof Symbol("id") 返回 “symbol”。
  1. BigInt(大整数):
  • ES6 引入,表示任意精度的整数。
  • 创建方式:追加 ‘n’,如 1234567890123456789012345678901234567890n,或用 BigInt() 函数。
  • 支持运算符如 +*-**%,但不支持 >>>
  • 与 Number 类型不能直接混合运算,会抛 TypeError

以下是基本数据类型的总结表:

类型描述特殊说明
Number整数和浮点数,基于 IEEE 754包含 Infinity、-Infinity、NaN
StringUTF-16 编码的文本不可变,方法返回新字符串
Booleantrue 或 false用于条件判断
Null表示空对象指针typeof 返回 “object”,用 === null 测试
Undefined表示值缺失未初始化变量默认此值
Symbol唯一不可变值通常用于对象属性键
BigInt任意精度整数ES6 引入,处理大数
引用数据类型

引用数据类型主要为 Object,包括以下子类型:

  • Object:键值对集合,属性键为字符串或 Symbol,值可以是任何类型。
  • Array:有序集合,例如 [1, 2, 3],typeof 返回 “object”,可用 Array.isArray()instanceof Array 检测。
  • Function:可调用的对象,例如 function add(a, b) { return a + b; }typeof 返回 “function”。
  • RegExp:正则表达式,用于模式匹配,例如 /abc/g
  • Date:表示日期和时间,例如 new Date()

对象有两种属性类型:

  • 数据属性:包含 valuewritableenumerableconfigurable
  • 访问器属性:包含 getsetenumerableconfigurable
  • 原型(prototype)指向另一个对象或 null

类型检测与动态类型

  • 类型检测
  • 使用 typeof 运算符检测类型,例如 typeof "John" 返回 “string”。
  • 注意:typeof null 返回 “object”,这是已知错误;typeof [1, 2, 3] 返回 “object”,因为数组是对象。
  • 检测数组可用 Array.isArray([1, 2, 3])[1, 2, 3] instanceof Array
  • 动态类型
  • JavaScript 是动态类型语言,变量可以持有任何类型,且类型可在运行时改变。
  • 示例:
    javascript let x; console.log(typeof x); // "undefined" x = 123; console.log(typeof x); // "number" x = "Hello"; console.log(typeof x); // "string"
  • 这种灵活性使得 JavaScript 易于使用,但也可能导致类型相关错误。

其他特性

  • 所有基本类型(除 null 和 undefined)都有对应的对象包装类型,提供方法。例如,Number 对象有 toExponential() 方法。
  • 数学运算安全,不会导致致命错误,最坏情况返回 NaN,例外情况如 NaN ** 0 = 1
  • 位运算符将 Number 转换为 32 位整数,适用于位掩码,但不推荐用于复杂逻辑。

信息来源与可靠性

本文信息基于以下权威资料,确保准确性和全面性:

这些资料一致性高,涵盖了 ES6 及以上版本的最新特性,确保信息的时效性。

关键引用


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注