5.多种方式实现深拷贝、对比优缺点

前情提要

深拷贝:拷贝的是对象或者数组内部数据的实体,重新开辟了内存空间存储数据;
浅拷贝:拷贝的是引用类型的指针,副本和原数组或对象指向同一个内存;

①递归方式

比较全面的深拷贝,缺点是较为繁琐

function deepClone(obj) {
    var target = {};
    for(var key in obj) {
        if (Object.prototype.hasOwnProperty.call(obj, key)) {
            if (typeof obj[key] === 'object') {
                target[key] = deepClone(obj[key]); 
            } else {
                target[key] = obj[key];
            }
        }
    }
    return target;
}

②JSON.parse(JSON.stringify(obj))

满足一般使用场景,但无法实现对象中方法(fountion)的深拷贝

let obj = {
    id: 1,
    name: '张三',
    age: 10,        
}
let newObj = JSON.parse(JSON.stringify(obj))

③jQuery的extend方法实现深拷贝

④Object.assign  和 扩展运算符   两者都是 只有一级属性为深拷贝,二级属性后就是浅拷贝

let obj = {
    id: 1,
    name: '张三',
    age: 10,        
}
let newObj = Object.assign({}, obj)

var obj = {
        a: 1,
        b: 2
      }
 
var obj1 = {...obj}

⑤数组使用数组方法进行深拷贝 concat、slice

  只有一级属性为深拷贝,二级属性后就是浅拷贝,如[1,2,3,[1,2,3]]

 var arr1 = [1, 2, 3, 4]
 var arr2 = arr1.concat()
 var arr3 = arr1.slice(1)

 

posted @ 2023-03-05 09:11  不想做混子的奋斗远  阅读(91)  评论(0)    收藏  举报