前端架构一个

一个例子 - 看尽JS的深度克隆

2019-07-08  本文已影响0人  Jason_Zeng
  1. 在JS中的等于号都是把对象的地址引用了,所有普通的赋值或者是Object.assign都是浅克隆,那么怎么深克隆呢
  2. 基本思想就是遍历对象,一个一个赋值
  3. 遇到对象或者数组的化递归
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)

这里有几个点需要注意以下

在遍历目标对象的时候,首先需要属性是不是对象,不是的话,证明是基本类型对不,那么就可以直接赋值了,因为基本类型在内存中的栈里存的就是真实值
如果是对象或者数组的化,那么需要递归调用这个对象,直到是基本类型为止

上一篇下一篇

猜你喜欢

热点阅读