// 浅拷贝实现
function shadowCopy(target, source){
if( !source || typeof source !== 'object'){
return;
}
// 这个方法有点小trick,target一定得事先定义好,不然就不能改变实参了。
// 具体原因解释可以看参考资料中 JS是值传递还是引用传递
if( !target || typeof target !== 'object'){
return;
}
// 这边最好区别一下对象和数组的复制
for(var key in source){
if(source.hasOwnProperty(key)){
target[key] = source[key];
}
}
}
// 深拷贝的实现
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;
}
let a=[1,2,3,4],
b=deepClone(a);
a[0]=2;
console.log(a,b);
网友评论