常见对象拷贝object.assign、$.extend能复制对象到一个新的对象,对于被拷贝的对象属性值为基础数据类型时没有什么问题,如果被拷贝的对象属性值为array、object则会出现问题
object.assgin,$.extend拷贝对象
var orgObj = {a:{b:'c'}}
var newObj = Object.assign({},orgObj)
var newObj2 = $.extend({},orgObj)
orgObj.a.b='d'
//{a:{b:'d'}} newObj 中a.b的值相应会变是因为复制的属性值为对象和orgObj中a.b指向同一内存地址
//{a:{b:'d'}} newObj2 同理
这种情况只能用做普通的对象拷贝 如果要深拷贝则另想办法
深拷贝
var deepclone = function(obj){
var cloneObj = Array.isArray(obj) ? [] : {};//注:typeof array == 'object'
if(obj && typeof obj == 'object'){
for(let key in obj){
if(obj.hasOwnProperty(key) && typeof obj[key] == 'object'){
cloneObj[key] = deepclone(obj[key]);
}else{
cloneObj[key] = obj[key];
}
}
}
return cloneObj;
};
var orgObj = {a:{b:'c'}}
var newObj = deepclone(orgObj)
orgObj.a.b='d'
//{a:{b:'c'}} newObj中a.b的值不会改变
网友评论