1.浅拷贝 适用于维度是一维数组,多维数组由于(数组和对象是引用类型的)(常用方法)
let oldCopy = [1,2,3];
let numbersCopy = [...oldCopy];
2.深拷贝 适用于对象和数组
let a = [[1],[2]]
let b = JSON.parse(JSON.stringify(a))
对象的深拷贝
1.时间将只是字符串的形式。而不是时间对象
2.如果obj里有函数,undefined,则序列化的结果会把函数或 undefined丢失
3.如果obj里有RegExp、Error对象,则序列化的结果将只得到空对象
4.会丢弃对象的constructor
js实现
function deepClone(obj){
let objClone = Array.isArray(obj)?[]:{};
if(obj && typeof obj==="object"){
for(key in obj){
if(obj.hasOwnProperty(key)){
//判断ojb子元素是否为对象,如果是,递归复制
if(obj[key]&&typeof obj[key] ==="object"){
objClone[key] = deepClone(obj[key]);
}else{
//如果不是,简单复制
objClone[key] = obj[key];
}
}
}
}
return objClone;
}
网友评论