JavaScript深拷贝

    技术2022-07-11  81

    JavaScript深拷贝

    浅拷贝深拷贝JSON实现深拷贝递归实现深拷贝

    浅拷贝

    对于引用数据类型,对象名存储在栈内存中,对象值则存储在堆内存中,同时栈内存会提供一个引用指向堆内存中的值。浅拷贝只会将对象的各个属性进行依次复制,并不会进行递归复制,而 JavaScript 存储对象都是存地址的,所以浅拷贝会导致两个对象引用指向同一块堆内存地址。如果需要两个指向不同堆内存且值相同的对象,则需要使用深拷贝。

    深拷贝

    定义如下对象:

    var student = { id : '01', name : '张三', achievement : { Chinese : 80, Mathematics : 90, English : 89 }, family : ['Dad', 'mom', 'Grandpa', 'grandma'] }

    JSON实现深拷贝

    var result = JSON.parse(JSON.stringify(student))

    递归实现深拷贝

    function deepCopy(obj) {    let newObj = (obj instanceof Array ? [] : {});       if (obj && typeof obj === 'object') {        for(key in obj){ if(typeof obj[key] === "object"){ newObj[key] = deepCopy(obj[key]); }else{ newObj[key] = obj[key]; }        }       }     return newObj;   } var student2 = deepCopy(student);
    Processed: 0.009, SQL: 9