1."="赋值操作
const arr = ["孙悟空", "猪八戒", "沙和尚"]
const arr2 = arr;
console.log(arr)
console.log(arr2)
输出:
修改第一个数组arr的任意一个值,我们可以发现,两个输出都会同时修改,故其"="赋值只是赋值了数组的内存地址,并没有开辟新的内存空间。
const arr = ["孙悟空", "猪八戒", "沙和尚"]
const arr2 = arr;
console.log(arr)
console.log(arr2)
console.log("-----------修改后-----------")
arr[0] = "白骨精"
console.log(arr)
console.log(arr2)
输出:
2.深拷贝和浅拷贝的区别
浅拷贝(shallow copy)
-通常对对象的拷贝都是浅拷贝
-浅拷贝顾名思义,只对对象的浅层进行复制**(只复制一层)**
-如果对象中存储的数据是原始值,那么拷贝的深浅是不重要
深拷贝(deep copy)
-深拷贝指不仅复制对象本身,还复制对象中的属性和元素
-因为性能问题,通常情况不太使用深拷贝
var a1 = {b: {c: {}};
var a2 = shallowClone(a1); // 浅拷贝方法
a2.b.c === a1.b.c // true 新旧对象还是共享同一块内存
var a3 = deepClone(a3); // 深拷贝方法
a3.b.c === a1.b.c // false 新对象跟原对象不共享内存
浅拷贝案例:
// 浅拷贝
const obj1 = {
name : 'init',
arr : [1,[2,3],4],
};
const obj3=shallowClone(obj1) // 一个浅拷贝方法
obj3.name = "update";
obj3.arr[1] = [5,6,7] ; // 新旧对象还是共享同一块内存
console.log('obj1',obj1) // obj1 { name: 'init', arr: [ 1, [ 5, 6, 7 ], 4 ] }
console.log('obj3',obj3) // obj3 { name: 'update', arr: [ 1, [ 5, 6, 7 ], 4 ] }
深拷贝案例:
// 深拷贝
const obj1 = {
name : 'init',
arr : [1,[2,3],4],
};
const obj4=deepClone(obj1) // 一个深拷贝方法
obj4.name = "update";
obj4.arr[1] = [5,6,7] ; // 新对象跟原对象不共享内存
console.log('obj1',obj1) // obj1 { name: 'init', arr: [ 1, [ 2, 3 ], 4 ] }
console.log('obj4',obj4) // obj4 { name: 'update', arr: [ 1, [ 5, 6, 7 ], 4 ] }