JavaScript 中有 6 个基本数据类型:
- String:字符串,用于表示文本内容
- Number:数字,用于表示整数或浮点数
- Boolean:布尔值,表示逻辑真假,只有 true 和 false 两个值
- Null:空值,表示一个为空的值
- Undefined:未定义,表示一个变量没有被赋值
- Symbol:符号,ES6 中新增,用于创建唯一标识符
它们的主要特点是:
- 存储在栈(stack)中,占用空间小,访问速度快
- 直接操作改变的是值,不会影响原变量
- 传递参数时以值的方式传递(值拷贝)
例如:
let a = 1; // Number
let b = 'hello'; // String
let c = true; // Boolean
let d = null; // Null
let e; // Undefined
let f = Symbol(); // Symbol
a = 2; // a 变为 2,不影响其他变量
b = 'hi'; // b 变为 'hi',不影响其他变量
func(a); // 将 a 的值 1 传给形参
a // 仍为 2,不受函数内改变的影响
相比之下,引用类型(Object、Array 等)的特点是:
- 存储在堆(heap)中,占用空间大,访问速度相对慢
- 操作改变的是内存中的值,会影响原变量
- 传递参数时以引用的方式传递
例如:
let obj = {a: 1}; // 对象是引用类型
obj.a = 2; // 改变的是原对象,obj 也变为 {a: 2}
func(obj);
obj.a // 如果函数内改变了属性值,这里可以看到改变后的结果
所以总结来说:
- 基本数据类型存储在栈中,传递参时为值传递,操作改变值本身。
- 引用数据类型存储在堆中,传递参时为引用传递,操作改变内存中的值。