JavaScript 数据类型
数据类型是编程语言的基础,它们决定了变量可以存储哪些类型的值,以及可以对这些值进行哪些操作。JavaScript 作为一门动态类型语言,其数据类型系统非常灵活。
JavaScript 的数据类型
最新的 ECMAScript 标准定义了八种数据类型:
七种基本数据类型:
- 布尔值 (Boolean): 只有两个值:
true
(真) 和false
(假),用于表示逻辑判断的结果。 - 空值 (null): 表示一个空值,可以用
null
关键字表示。 - 未定义 (undefined): 表示变量未被赋值。
- 数字 (Number): 表示整数或浮点数,例如
42
、3.14159
。 - 任意精度整数 (BigInt): 用于表示超大整数,超过了普通
Number
类型的安全整数限制。 - 字符串 (String): 表示文本数据,例如
"Hello, world!"
。 - 符号 (Symbol): ES6 引入的新类型,用于创建独一无二的值。
一种复杂数据类型:
- 对象 (Object): 用于存储复杂的数据结构,由键值对组成。
动态类型
JavaScript 的一大特点是 动态类型,这意味着我们无需在声明变量时指定其数据类型,解释器会在运行时根据变量的值自动推断其类型。
let age = 25; // age 的类型被推断为数字
age = "二十五岁"; // age 的类型被动态地改为字符串
这种灵活性为我们编写代码带来了便利,但也需要我们更加小心,避免因为类型转换问题导致的错误。
数据类型转换
在 JavaScript 中,经常需要进行数据类型转换,特别是数字和字符串之间的转换。
数字转换为字符串:
- 在使用
+
运算符连接字符串时,如果其中一个操作数是数字,JavaScript 会自动将数字转换为字符串。
let message = "你的年龄是:" + 25; // message 的值是 "你的年龄是:25"
字符串转换为数字:
- 可以使用
parseInt()
函数将字符串解析为整数,忽略小数部分。
let age = parseInt("25"); // age 的值是 25
- 可以使用
parseFloat()
函数将字符串解析为浮点数。
let price = parseFloat("39.99"); // price 的值是 39.99
- 可以使用一元加法运算符 (
+
) 将字符串转换为数字。
let num = +"123"; // num 的值是 123
原始类型与引用类型
JavaScript 的八种数据类型可以进一步分为两类:
- 原始类型 (Primitive Types):
- 包括:布尔值 (Boolean)、空值 (null)、未定义 (undefined)、数字 (Number)、BigInt、字符串 (String)、符号 (Symbol)。
- 存储在栈内存中,变量直接存储值。
- 按值传递: 复制变量时,复制的是值的副本,修改一个变量不会影响另一个。
- 引用类型 (Reference Types):
- 包括:对象 (Object) ,以及由对象派生出的数组 (Array)、函数 (Function) 等。
- 存储在堆内存中,变量存储的是值的引用(内存地址)。
- 按引用传递:复制变量时,复制的是内存地址的副本,指向同一个值。修改一个变量会影响另一个。
// 原始类型
let a = 10;
let b = a;
b = 20; // 修改 b 不会影响 a
console.log(a); // 10
// 引用类型
let obj1 = { name: "Alice" };
let obj2 = obj1;
obj2.name = "Bob"; // 修改 obj2 会影响 obj1
console.log(obj1.name); // "Bob"