淺拷貝
淺拷貝只拷貝一層,深層次的對象只拷貝引用
var obj = {
name: 'zhangsan',
age: 18,
omg: {
name: 'omg'
}
}
var ob = {};
for (var i in obj) {
ob[i] = obj[i]
}
console.log(ob);

拷貝對象ob
ob深層對象omg改變會改變原始對象obj中的omg
var obj = {
name: 'zhangsan',
age: 18,
omg: {
name: 'omg'
}
}
var ob = {};
for (var i in obj) {
ob[i] = obj[i]
}
ob.omg.name = 'ob';
ob.name = 'omg';
console.log(ob)
console.log(obj);

淺拷貝會改變深層對象
ES6 新增的淺拷貝方法 Object.assign
var obj = {
name: 'zhangsan',
age: 18,
omg: {
name: 'omg'
}
}
var ob = {};
Object.assign(ob,obj);
console.log(ob)

對象淺拷貝方法assign
利用遞歸進行對象的深拷貝
var obj = {
name: 'zhangsan',
age: 18,
omg: {
name: 'omg'
},
yy: [1,2,3]
}
var ob = {};
function deepCopy(newO,oldO) {
for (var k in oldO) {
var item = oldO[k];
if (item instanceof Array) {
newO[k] = [];
deepCopy(newO[k],item);
} else if (item instanceof Object) {
newO[k] = {};
deepCopy(newO[k],item);
} else {
newO[k] = item;
}
}
}
deepCopy(ob,obj);
ob.omg.name = 'ccc';
ob.yy.push(1,2);
console.log(ob);
console.log(obj);

深拷貝