直接赋值、浅拷贝、深拷贝

1、直接赋值

把一个对象a赋值给一个对象b,相当于让对象b的地址指向对象a的地址。所以,他们实际上是同一个对象。此时,修改对象b里的值,对象a里对应的值也会跟着改变(不管该值是对象属性还是非对象属性)。例如:
在这里插入图片描述


2、浅拷贝

ES6中浅拷贝方法:

var b = {};
Object.assign(b, a);

或者:

 var b = { ...a };

把一个对象a浅拷贝给一个对象b。

1、修改对象b里的非对象属性值,对象a里对应的非对象属性值不受影响
2、修改对象b里的对象属性值,对象a里对应的对象属性值也会跟随着被修改
在这里插入图片描述


3、深拷贝

深拷贝,即拷贝一个一模一样的对象,但是新对象跟原对象不再共享内存。所以修改新对象的对象属性值或非对象属性值,都不会影响原对象。

深拷贝方法实现: 利用 JSON.stringify() 方法将对象a转化成json字符串,再利用JSON.parse() 方法将json字符串转成对象b即可。如:
在这里插入图片描述

注意:

由于JSON.stringify()需遵守JSON序列化规则:
1、原对象中如果含有Date对象,JSON.stringify()会将其变为字符串,之后并不会将其还原为日期对象。
2、原对象中如果含有RegExp对象,JSON.stringify()会将其变为空对象;
3、属性中含有NaN、Infinity和-Infinity,则序列化的结果会变成null;
4、如果属性中有函数,undefined,symbol则经过JSON.stringify()序列化后的JSON字符串中这个键值对会消失,因为不支持。

这个时候就只能用下面这样的笨方法了:
在这里插入图片描述

おすすめ

転載: blog.csdn.net/sqf251877543/article/details/120221489