浅拷贝、深拷贝
一、浅拷贝
方式1:直接赋值
方式2:Object.assign()
二、深拷贝
方式1:手动实现
function deepClone(source) {
if(!source) return;
let target = null;
switch (true){
case Array.isArray(source):
target = [];
source.forEach((item) => {
target.push(deepClone(item));
});
break;
case Object.getPrototypeOf(source) === Object.prototype:
target = {};
Object.keys(source).forEach((key) => {
target[key] = deepClone(source[key])
});
break;
default:
target = source;
}
return target
}
方式2:借助JSON
const copy = JSON.parse(JSON.stringify(source));
弊端:会抛弃对象的constructor
适用:能够被json直接表示的数据结构(对象中只包含number、string、boolean、array、扁平对象)
不适用:含有function、regexp的数据结构
方式3:借助第三方工具库
loash:_.cloneDeep
jquery:$.extend
参考:
Last updated