值类型(原始类型)
值类型包括:undefined
、null
、boolean
、number
、string
、symbol
和 bigint
。这些类型的特点是:
- 存储位置:值类型的数据直接存储在栈(Stack)中。
- 复制行为:当一个值类型的变量复制给另一个变量时,实际上是将存储在栈中的值复制一份到新的变量的存储位置。两个变量完全独立,互不影响。
- 比较行为:值类型的比较是值的比较,只有值完全相等时,才返回
true
。
引用类型
引用类型包括:对象(Object
)、数组(Array
)、函数(Function
)等。引用类型的特点是:
- 存储位置:引用类型的数据是存储在堆(Heap)中的,而变量实际上存储的是一个指向堆内存中该对象的指针。
- 复制行为:当一个引用类型的变量复制给另一个变量时,复制的是内存地址,因此两个变量指向同一个对象。如果一个变量的对象内容被修改,另一个变量访问的对象内容也会发生改变。
- 比较行为:引用类型的比较是指针的比较,即比较的是是否指向同一个对象的内存地址,而不是内容比较。
实例说明
let num1 = 100;
let num2 = num1;
num2 = 200;
console.log(num1); // 输出 100,因为num1和num2是独立的
let obj1 = { value: 100 };
let obj2 = obj1;
obj2.value = 200;
console.log(obj1.value); // 输出 200,因为obj1和obj2指向同一个对象
理解这些差异有助于更好地管理数据存储、传递和操作,尤其是在处理大型或复杂的JavaScript应用程序时。