对象的扩展运算符(...)深拷贝还是浅拷贝

Posted 我在神游

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象的扩展运算符(...)深拷贝还是浅拷贝相关的知识,希望对你有一定的参考价值。

1、如果只是一层数组或是对象,其元素只是简单类型的元素,那么属于深拷贝(就是一层拷贝,暂时就理解为深拷贝吧!!!!)

let aa = {
age: 18,
name: \'aaa\'
}

let bb = {...aa};
bb.age = 22;

console.log(aa.age); // 18

2、如果数组或对象中的元素是引用类型的元素,那么就是浅拷贝

let aa = {
age: 18,
name: \'aaa\',
address: {
    city: \'shanghai\'
}
}

let bb = {...aa};
bb.address.city = \'shenzhen\';

console.log(aa.address.city);  // shenzhen

3、如何使得深拷贝

let aa = {
    age: 18,
    name: \'aaa\',
    address: {
        city: \'shanghai\'
    }
}

let bb = {
    ...aa,
    address: {...aa.address}
};

bb.address.city = \'shenzhen\';

console.log(aa.address.city);  // shanghai

或者利用JSON.parse(JSON.stringfy(xxx))来实现深拷贝
注意:JSON.parse(JSON.stringfy(xxx))的方法,如果变量中含有Promise对象,则不可以使用该方法

以上是关于对象的扩展运算符(...)深拷贝还是浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章

深拷贝和浅拷贝区别是什么

JavaScript浅拷贝与深拷贝

深拷贝与浅拷贝的区别,实现深拷贝的几种方法

切片操作会给我一个深拷贝还是浅拷贝?

vue采用扩展运算符和深拷贝的区别

关于深拷贝和浅拷贝