深拷贝问题
深拷贝问题
一、
首先javascript中基本数据类型包括:string,number,boolean,undefined等;引用类型包括:object,function,array等;
二、
什么是值类型:
var a = 1;
var b =a;
b = b + 1;
console.log(a,b); // 1,2
基本类型的变量是存放在栈内存(Stack)里的。
值类型赋值时,会在栈内存空间中分配全新的地址,并得到相应的值。代码中 b 是从 a 创建来的,当 b 变化时,a 不会受到影响。这是符合常识的。
三、
什么是引用类型
var data = {
number: 0,
name: “猪小明”
}
var newData = data
newData.number = 100;
console.log(data.id, newData.id) // 100 100
引用类型的值是保存在堆内存(Heap)中的对象(Object)
与其他编程语言不同,JavaScript 不能直接操作对象的内存空间(堆内存)。当我们要访问一个对象的时候,实际上是从栈内存中获取引用地址,然后根据这个引用地址再从堆内存中获取所需要的值。
而引用类型赋值时,实际上是获取其引用地址,而不是直接获取值。所以,值发生改变时,源对象也会随着改变。