深拷贝
在面试过程中,时常会被问如何实现深克隆\深拷贝。也许你可以回答一些实现的方法,但是深追时,便原形毕露。
首先,Javascript基本类型了解一下。
Javascript基本数据类型:Undefined,Null,Boolean,Number,String
Javascript复杂数据类型:Object
1、浅克隆
浅克隆之所以被称为浅克隆,是因为对象只会被克隆最外面的一层。更深层的东西,则依旧指向通过引用指向同一堆块内存。
// 浅克隆函数
function shallowClone(o) {
const obj = {};
for ( let i in o) {
obj[i] = o[i];
}
return obj;
}
// 被克隆对象
const oldObj = {
a: 1,
b: [ 'e', 'f', 'g' ],
c: { h: { i: 2 } }
};
const newObj = shallowClone(oldObj);
console.log(newObj.c.h, oldObj.c.h); // { i: 2 } { i: 2 }
console.log(oldObj.c.h === newObj.c.h); // true
Object.assign()
2、深克隆
const newObj = JSON.parse(JSON.stringify(oldObj));