JS深浅拷贝学习总结

    技术2022-07-13  73

    浅拷贝

    浅拷贝只拷贝一层,对于对象内的简单数据类型,浅拷贝进行复制,而对象内的复杂的数据类型,则是复制了地址(即是指向原来的数据),如果对复杂类型进行修改,则原对象也会被修改,造成污染数据。

    例子

    var oldObj = { name: '陈冠希', inObj: { age: 18 }, arr: [1,2] } var newObj = {} //浅拷贝(循环拷贝) for(k in oldObj){ newObj[k] = oldObj[k] } //ES6提供的浅拷贝方法 Ob4ject.assign(newObj, oldObj)

    如果改变newObj中的age,oldObj也会被改变

    newObj.inObj.age = 10

    打印输出结果

    console.log(oldObj) console.log(newObj)

    深拷贝

    将复杂数据类型也进行拷贝,而不是简单的复制地址,使用递归实现:

    // 深拷贝 function deepCopy (newObj,oldObj){ for (k in oldObj) { if(oldObj[k] instanceof Array){ newObj[k] = [] deepCopy(newObj[k],oldObj[k]) }else if (oldObj[k] instanceof Object){ newObj[k] = {} deepCopy(newObj[k],oldObj[k]) }else{ newObj[k] = oldObj[k] } } } deepCopy(newObj,oldObj)

    改变newObj中的age,oldObj不会被改变

    newObj.inObj.age = 10

    输出拷贝结果

    Processed: 0.010, SQL: 10