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 Docs、JavaScript.info 和 菜鸟教程 的信息,基本数据类型包括以下七种(加上 ES6 引入的 BigInt,共八种):
- Number(数字):
- 表示整数和浮点数,例如 123、3.14。
- 基于 IEEE 754 标准,64 位双精度浮点数。
- 特殊值包括
Infinity
(正无穷大)、-Infinity
(负无穷大)和NaN
(非数字)。 - 安全整数范围为 -(2^53-1) 到 2^53-1,可用
Number.isSafeInteger()
检查。 - 位运算符会将数字转换为 32 位整数。
- String(字符串):
- 表示文本,例如 “Hello, World!”。
- 编码为 UTF-16,长度由 UTF-16 代码单元决定。
- 不可变,方法如
substring()
、concat()
创建新字符串。 - 不推荐用于复杂数据,建议使用数组。
- Boolean(布尔):
- 表示真假值,
true
或false
。 - 用于条件语句,如三元运算符、if…else、while 循环。
- Null(空):
- 唯一值是
null
,表示空对象指针。 typeof null
返回 “object”,这是 JavaScript 的历史遗留问题,建议用=== null
测试。
- Undefined(未定义):
- 唯一值是
undefined
,表示值缺失。 - 常见于未初始化的变量、缺失的对象属性,或方法如
Array.prototype.find()
未找到元素时返回。 - 不推荐显式赋值
undefined
,通常由语言默认。
- Symbol(符号):
- ES6 引入,表示唯一且不可变的值。
- 通常用作对象属性的键,避免属性冲突。
- 也称 “atoms”,
typeof Symbol("id")
返回 “symbol”。
- BigInt(大整数):
- ES6 引入,表示任意精度的整数。
- 创建方式:追加 ‘n’,如 1234567890123456789012345678901234567890n,或用
BigInt()
函数。 - 支持运算符如
+
、*
、-
、**
、%
,但不支持>>>
。 - 与 Number 类型不能直接混合运算,会抛
TypeError
。
以下是基本数据类型的总结表:
类型 | 描述 | 特殊说明 |
---|---|---|
Number | 整数和浮点数,基于 IEEE 754 | 包含 Infinity、-Infinity、NaN |
String | UTF-16 编码的文本 | 不可变,方法返回新字符串 |
Boolean | true 或 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()
。
对象有两种属性类型:
- 数据属性:包含
value
、writable
、enumerable
、configurable
。 - 访问器属性:包含
get
、set
、enumerable
、configurable
。 - 原型(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 位整数,适用于位掩码,但不推荐用于复杂逻辑。
信息来源与可靠性
本文信息基于以下权威资料,确保准确性和全面性:
- MDN Web Docs: JavaScript 数据类型和数据结构 提供了官方文档,涵盖所有类型和特性。
- 菜鸟教程: JavaScript 数据类型 提供了教程式解释,适合初学者。
- JavaScript.info: 数据类型 提供了详细的教学内容,包含示例和任务。
这些资料一致性高,涵盖了 ES6 及以上版本的最新特性,确保信息的时效性。