浅拷贝 ||深拷贝
定义:假如 B复制了A
,当修改A
时,看B
是否发生变化,如果B发生变化
则其为浅拷贝
,若 B 未发生变化
,则深拷贝
;
基本数据类型
:名字和值都会在栈内存;
引用了类型
:名字在栈内存
,值堆内存
,栈内存会提供一个引用地址指向堆内存中的值;
实现浅拷贝方法:
1.for … in 只循环第一层;
2.Object.assign()方法;
var obj = {
a: 1,b: 2}
var obj1 = Object.assign(obj);
obj1.a = 3;
console.log(obj.a) // 3
实现深拷贝方法;
1.通过递归去拷贝所有层级属性;
2.通过JSON 对象来实现深拷贝; 缺点就是无法实现的对象的深拷贝,就会显示undefined
function deepClone2(obj) {
var _obj = JSON.stringify(obj),
objClone = JSON.parse(_obj);
return objClone;
}
3.用concat实现对数组的深拷贝
4.使用扩展运算符实现深拷贝