项目中经常遇到赋值,但是用途不同,使用深拷贝和浅拷贝也不同
一:直接用等号赋值,当新值发生改变的时候,旧值也会随之改变
二:赋值后新值改变原值不发生改变,使用JSON.parse(JSON.stringfy(字段))(深拷贝:所有属于对象的属性类型都遍历赋给另一个对象)
三:赋值后新值改变原值不发生改变,使用Object.assign()(浅拷贝)
深拷贝和浅拷贝异同:
深拷贝:将 B 对象拷贝到 A 对象中,包括 B 里面的子对象,
浅拷贝:将 B 对象拷贝到 A 对象中,但不包括 B 里面的子对象
类型 | 和原数据是否指向同一对象 | 第一层数据为基本数据类型 | 原数据中包含子对象 |
---|---|---|---|
赋值 | 是 | 改变会使原数据一同改变 | 改变会使原数据一同改变 |
浅拷贝 | 否 | 改变不会使原数据一同改变 | 改变会使原数据一同改变 |
深拷贝 | 否 | 改变不会使原数据一同改变 | 改变不会使原数据一同改变 |
注:对象展开运算符(…)算是浅拷贝吧