js深拷贝浅拷贝简单实践

js深拷贝浅拷贝

一般我们以为这样就可以复制某个对象但是事实并非如此
let data = {
    a: 100,
    b: 100,
    c: {
        c1: 100
    }
}

let newData = data;

newData.a = 200;
newData.c.c1 = 200;

console.log(data); // 结果如下
你会发现原始数据也仍然被改变

你会发现

如果我们使用es6提供的 扩展运算符会是什么结果
let data = {
    a: 100,
    b: 100,
    c: {
        c1: 100
    }
}

let newData = { ...data }; // 使用扩展运算符

newData.a = 200;
newData.c.c1 = 200;

console.log(data);
a 变量没有改变但是 c 下的 c1 任然被改变,总结扩展运算符只能对第一次进行复制

在这里插入图片描述

如果我们使用json工具会不会有效呢?
let data = {
    a: 100,
    b: 100,
    c: {
        c1: 100
    }
}

let newData = jsonCopy(data);

newData.a = 200;
newData.c.c1 = 200;

console.log(data);

// 使用json进行复制
function jsonCopy(obj) {
    let jsonObj = JSON.stringify(obj);
    return JSON.parse(jsonObj);
}
答案显然是可以的,当然你也可以使用递归赋值 (我本人觉得这样更快更简单,也减轻了浏览器的运算压力)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_18567801/article/details/107863791