Object.assign()和展开运算符...的区别

5 篇文章 0 订阅

数组

使用object.assign

  1. Object.assign([], a, b)
let a = [1,2]
let b = [3,4]
let c = Object.assign([], a, b)
复制代码
console.log()a[1] = 6b[1] = 6c[1] = 5
a[1, 2][1, 6][1, 2][1, 2]
b[3, 4][3, 4][3, 6][3, 4]
c[3, 4][3, 4][3, 4][3, 5]

a的值被覆盖,分别改变a, b, c的值不会对其他值产生影响

2.Object.assign(a, b)

let a = [1,2]
let b = [3,4]
let c = Object.assign(a, b)
复制代码
console.log()a[1] = 6b[1] = 6c[1] = 5
a[3, 4][3, 6][3, 4][3, 5]
b[3, 4][3, 4][3, 6][3, 4]
c[3, 4][3, 6][3, 4][3, 5]

a的值被覆盖,改变a的值会同步影响c的值,改变b的值对a和c无影响,改变c的值会同步影响a的值

使用展开运算符...

  1. [...a, ...b]
let a = [1,2]
let b = [3,4]
let c = [...a, ...b]
复制代码
console.log()a[1] = 6b[1] = 6c[1] = 5
a[1, 2][1, 6][1, 2][1, 2]
b[3, 4][3, 4][3, 6][3, 4]
c[1, 2, 3, 4][1, 2, 3, 4][1, 2, 3, 4][1, 5, 3, 4]

a的值不会被覆盖,分别改变a, b, c的值不会对其他值产生影响

  1. [...[],...a, ...b]
let a = [1,2]
let b = [3,4]
let c = [...[],...a, ...b]
复制代码
console.log()a[1] = 6b[1] = 6c[1] = 5
a[1, 2][1, 6][1, 2][1, 2]
b[3, 4][3, 4][3, 6][3, 4]
c[1, 2, 3, 4][1, 2, 3, 4][1, 2, 3, 4][1, 5, 3, 4]

a的值不会被覆盖,分别改变a, b, c的值不会对其他值产生影响

对象

使用Object.assign

  1. Object.assign({}, a, b)
let a = { 1: 'aa', 2: 'bb' }
let b = { 1: 'cc', 4: 'dd' }
let c = Object.assign({}, a, b)
复制代码
console.log()a[1] = 'aaa'b[1] = 'ccc'c[1] = 'ccc'
a{1: "aa", 2: "bb"}{1: "aaa", 2: "bb"}{1: "aa", 2: "bb"}{1: "aa", 2: "bb"}
b{1: "cc", 4: "dd"}{1: "cc", 4: "dd"}{1: "ccc", 4: "dd"}{1: "cc", 4: "dd"}
c{1: "cc", 2: "bb", 4: "dd"}{1: "cc", 2: "bb", 4: "dd"}{1: "cc", 2: "bb", 4: "dd"}{1: "ccc", 2: "bb", 4: "dd"}

1.合并a,b到c时,key相同的属性会合并,且后面元素覆盖前面元素
2.分别改变a,b,c的值不会影响其他元素的值

  1. Object.assign(a, b)
let a = { 1: 'aa', 2: 'bb' }
let b = { 1: 'cc', 4: 'dd' }
let c = Object.assign(a, b)
复制代码
console.log()a[1] = 'aaa'b[1] = 'ccc'c[1] = 'ccc'
a{1: "cc", 2: "bb", 4: "dd"}{1: "aaa", 2: "bb", 4: "dd"}{1: "cc", 2: "bb", 4: "dd"}{1: "ccc", 2: "bb", 4: "dd"}
b{1: "cc", 4: "dd"}{1: "cc", 4: "dd"}{1: "ccc", 4: "dd"}{1: "cc", 4: "dd"}
c{1: "cc", 2: "bb", 4: "dd"}{1: "aaa", 2: "bb", 4: "dd"}{1: "cc", 2: "bb", 4: "dd"}{1: "ccc", 2: "bb", 4: "dd"}

1.合并a,b到c时,a的值同步变成c的值
2.改变a的值会同步影响c的值,改变c的值也会同步影响a的值,改变b的值对a,c的值无影响

使用展开运算符...

1.{...a, ...b}

let a = { 1: 'aa', 2: 'bb' }
let b = { 1: 'cc', 4: 'dd' }
let c = {...a, ...b}
复制代码
console.log()a[1] = 'aaa'b[1] = 'ccc'c[1] = 'ccc'
a{1: "aa", 2: "bb"}{1: "aaa", 2: "bb"}{1: "aa", 2: "bb"}{1: "aa", 2: "bb"}
b{1: "cc", 4: "dd"}{1: "cc", 4: "dd"}{1: "ccc", 4: "dd"}{1: "cc", 4: "dd"}
c{1: "cc", 2: "bb", 4: "dd"}1: "cc", 2: "bb", 4: "dd"}{1: "cc", 2: "bb", 4: "dd"}{1: "ccc", 2: "bb", 4: "dd"}

1.合并a,b到c时,key相同的属性会合并,且后面元素覆盖前面元素
2.分别改变a,b,c的值不会影响其他元素的值

  1. {...{}, ...a, ...b}
let a = { 1: 'aa', 2: 'bb' }
let b = { 1: 'cc', 4: 'dd' }
let c = {...{}, ...a, ...b}
复制代码
console.log()a[1] = 'aaa'b[1] = 'ccc'c[1] = 'ccc'
a{1: "aa", 2: "bb"}{1: "aaa", 2: "bb"}{1: "aa", 2: "bb"}{1: "aa", 2: "bb"}
b{1: "cc", 4: "dd"}{1: "cc", 4: "dd"}{1: "ccc", 4: "dd"}{1: "cc", 4: "dd"}
c{1: "cc", 2: "bb", 4: "dd"}{1: "cc", 2: "bb", 4: "dd"}{1: "cc", 2: "bb", 4: "dd"}{1: "ccc", 2: "bb", 4: "dd"}

1.合并a,b到c时,key相同的属性会合并,且后面元素覆盖前面元素
2.分别改变a,b,c的值不会影响其他元素的值


作者:原始l
链接:https://juejin.cn/post/6971998812889940005
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值