- 在JS中的等于號(hào)都是把對(duì)象的地址引用了,所有普通的賦值或者是Object.assign都是淺克隆,那么怎么深克隆呢
- 基本思想就是遍歷對(duì)象,一個(gè)一個(gè)賦值
- 遇到對(duì)象或者數(shù)組的化遞歸
function deepClone(parent, child) {
child = child || {};
for (const key in parent) {
if (parent.hasOwnProperty(key)) {
let item = parent[key];
if (typeof item === "object") {
child[key] = Object.prototype.toString.call(item) === "[object Array]" ? [] : {};
deepClone(item,child[key],);
} else {
child[key] = item;
}
}
}
return child;
}
let a = {a:1,b:{c:3,d: [6,5,4,3]}}
let b = {};
b = deepClone(a,b);
console.log(a,b)
這里有幾個(gè)點(diǎn)需要注意以下
在遍歷目標(biāo)對(duì)象的時(shí)候,首先需要屬性是不是對(duì)象,不是的話,證明是基本類型對(duì)不,那么就可以直接賦值了,因?yàn)榛绢愋驮趦?nèi)存中的棧里存的就是真實(shí)值
如果是對(duì)象或者數(shù)組的化,那么需要遞歸調(diào)用這個(gè)對(duì)象,直到是基本類型為止