深拷貝和淺拷貝的區別:深拷貝和淺拷貝的使用場景是在複雜對象裏,即對象的屬性還是對象,
淺拷貝是指只複製一層對象,當對象的屬性是引用類型時,實質複製的是其引用,當引用指向的值改變時也會跟着變化
//深拷貝對象
function deepCopy(value){
if(typeof value != 'object'){
return value;
}
let o = value.constructor == Array ? [] :{};
if(o instanceof Array){
for(let key of Object.keys(value)){
o[key] = deepCopy(value[key]);
}
}else{
for(let i in value){
o[i] = deepCopy(value[i]);
}
}
return o;
}
let a=[11,[2,3,[4]],5,7,[9]];
let b = {
a:{g:6},
b:1,
c:{
d:{
e:4
},
f:5
}
}
let c = deepCopy(a);
let d = deepCopy(b);
//淺拷貝,只copy第一層的屬性值,如果屬性值是對象,則複製的是這個對象的引用。
function shallowCopy(src) {
var dst = {};
for (var prop in src) {
if (src.hasOwnProperty(prop)) {
dst[prop] = src[prop];
}
}
return dst;
}