js 浅拷贝深拷贝
不管是浅拷贝还是深拷贝都是针对js引用类型复制
1、浅拷贝
对于引用类型的复制:
var a = { a: 1}
b = a
当改变b的值, a的值也会发生改变(复制的是占内存的地址)
但是对于基本类型
var a = '1'
b = a
当改变b 的值 a确不会改变(这就相当于深拷贝,复制的是栈内存的内容)
2、第一层的深拷贝
js 原生方法的concat slice(第二层就是浅拷贝)
3、深拷贝
深拷贝就是在堆内内存专门开辟一个新的内存
常用的深拷贝方法:
1. JSON.parse(JSON.stringify()) 缺点: 无法实现对对象中方法的深拷贝,会显示为undefined
2.手动的深拷贝
// deepCopy
function deepCopy(data) {
const t = typeOf(data);
let o;
if (t === 'array') {
o = [];
} else if ( t === 'object') {
o = {};
} else {
return data;
}
if (t === 'array') {
for (let i = 0; i < data.length; i++) {
o.push(deepCopy(data[i]));
}
} else if ( t === 'object') {
for (let i in data) {
o[i] = deepCopy(data[i]);
}
}
return o;
}
浙公网安备 33010602011771号