js数组或对象浅拷贝深拷贝的⼏种⽅法
对象浅拷贝
第⼀种
对象的合并 Object.assign(),第⼀个参数必须是个空对象
var obj1 ={a:1, b:2};
var obj2 = Object.assign({}, obj1);
第⼆种
对象的解构赋值
var obj1 ={a:1, b:2};
var obj2 ={...obj1};
对象深拷贝
第⼀种
利⽤jQuery的$.extend⽅法
//第⼀个参数不传(false是不能够显⽰的写出来的)默认为false,是浅拷贝。传true为深拷贝。
$.extend(true,object1, object2)
//newObject 即为深拷贝出来的对象
var newObject = $.extend(true,{}, object);
第⼆种
//通过js的内置对象JSON来进⾏数组对象的深拷贝
function deepClone(obj){
var _obj =JSON.stringify(obj),
objClone =JSON.parse(_obj);
return objClone;
}
注意
这种简单粗暴的⽅法有其局限性,当值为undefined、function、symbol 会在转换过程中被忽略例如:
var syb =Symbol('obj');
var person ={
name :'tino',
say:function(){
console.log('hi');
},
ok: syb,
un: undefined
};
var copy =JSON.parse(JSON.stringify(person));
第三种
数组或对象深拷贝(利⽤循环和递归)
function deepClone(obj, newObj){
var newObj = newObj ||{};
for(key in obj){
if(typeof obj[key]=='object'){
newObj[key]=(obj[key].constructor === Array)?[]:{}
deepClone(obj[key], newObj[key]);
}else{
newObj[key]= obj[key]
}
}
return newObj;
}
数组浅拷贝
typeof array
利⽤数组的 slice ⽅法或者 concat ⽅法
var arr1 =["aaa","bbb","ccc"];
var arr2 = arr1.slice(0);
arr2[0]="ddd";
var arr1 =["aaa","bbb","ccc"]; var arr2 = at();
arr2[0]="ddd";
数组深拷贝
参考对象深拷贝的后两种⽅法

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。