参考:js浅拷贝及深拷贝的几种方法
参考:Object.assign()用法讲解
var obj1 = {a: 1, b: 2};
var obj2 = Object.assign({}, obj1);
var obj1 = {a: 1, b: 2};
var obj2 = {...obj1};
浅拷贝实现原理:
function shallowCopy(obj) {
var target = {};
for (let i in obj) {
if (obj.hasOwnproperty(i)) {
target[i] = obj[i];
}
}
return target;
}
var obj1 = {
name: 'li',
hobit: ['摄影', '羽毛球']
}
var obj2 = JSON.parse(JSON.stringify(obj1));
obj2.hobit.push('游泳');
console.log(obj1); //{ name: 'li', hobit: [ '摄影', '羽毛球' ] }
console.log(obj2); //{ name: 'li', hobit: [ '摄影', '羽毛球', '游泳' ] }
使用JSON.parse 和JSON.stringfy也会有很多限制:参考:关于JSON.parse(JSON.stringify(obj))实现深拷贝应该注意的坑
可通过递归来实现一个深拷贝:
function deepCopy(obj) {
if (obj == null) return obj;
if (obj instanceof Date) return new Date();
if (obj instanceof RegExp) return new RegExp(obj);
if (typeof obj !== 'object') return obj;
let cloneObj = new obj.constructor();
for (let i in obj) {
if (obj.hasOwnproperty(i)) {
cloneObj[i] = deepCopy(obj[i]);
}
}
return cloneObj;
}
$.extend( [deep ], target, object1 [, objectN ] )