#yyds干货盘点#Object.assign实现的是浅拷贝还是深拷贝?

Posted 尼羲

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点#Object.assign实现的是浅拷贝还是深拷贝?相关的知识,希望对你有一定的参考价值。

assign()语法:

Object.assign(target, ...sources)

target:目标对象,接收源对象属性的对象,也是修改后的返回值。sources:源对象,包含将被合并的属性。下面来看例子:

let s =  a: 1 
let target = Object.assign(, s)
console.log(target) // a: 1

s.a = 2
console.log(s) // a: 2
console.log(target) // a: 1

看到这里可能有人会说,这不是第一层就是深拷贝吗?其实非如此

let s =  a:  b: 1 , c: 1 
let target = Object.assign(, s)
console.log(target) // a: b: 1 , c: 1

s.a.b = 2
s.c = 3
console.log(s) // a: b: 2 , c: 3
console.log(target) // a: b: 2 , c: 1

target.a.b的值随着source变化而变化,但是target.c的值并没有随着source变化

下面来总结开篇提到的:针对使用深拷贝,需要使用其他方法,因为

Object.assign()拷贝的是属性值,如果源对象的属性值是一个指向对象的指针,那也只拷贝那个指针。

所以如果对象的属性值为基础类型,通过Object.assign()拷贝的那个属性而言是深拷贝。

如果对象的属性值为引用类型,通过Object.assign()拷贝的那个属性而言是浅拷贝。


以上是关于#yyds干货盘点#Object.assign实现的是浅拷贝还是深拷贝?的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点#three.js源码解读-EventDispatcher

#yyds干货盘点# java实现快速排序

#yyds干货盘点#CSS实现随机不规则圆角头像

#yyds干货盘点# springboot整合Elastic Job实现分片配置定时任务

#yyds干货盘点# springcloud整合gateway实现网关全局过滤器功能

CSS实现一只自由飞翔的鸟儿?#yyds干货盘点#