大家好久不见,甚是想念
今天你敲代码了吗!?今天我们来讨论一下js展开运算符的问题
先上代码 让我们来看一下
let d ={
a:2
b:{
x:[4,5,6],
y:[1,2,3]
}
}
e=d
d.a =4
console.log(e)
这个时候我们都知道 d和e都被更改了 这个叫浅拷贝
因此我们可以使用深拷贝来解决这个问题
let d ={
b:{
x:[4,5,6],
y:[1,2,3]
}
}
e = [...d]
console.log(e)
而这个时候你觉得问题解决了吗
然后我搜了搜资料
展开运算符 是不能展开对象的 只能展开数组
那该如何解决这个问题呢
不多啰嗦 让我们来看一下
let d ={
b:{
x:[4,5,6],
y:[1,2,3]
}
}
e={...d}
console.log(e)
这个时候我们实现了深拷贝
你随便修改d吧 e的值也不会跟你修改
而这个时候我们又来了一个问题
如何让x、y 合并在一起呢
let d ={
b:{
x:[4,5,6],
y:[1,2,3]
}
}
e=[...d.b.x,...d.b.y]
console.log(e)
先上结果,我们是可以获取到的
但是这个时候有点疑问了,不是说数组里面不能用展开运算符 不是说 […d] 不能展开对象吗
经过一同分析
让我来给出解释,这是因为优先级,其实还是展开的是数组 …(d.b.x) 而不是(…d).b.x
希望对你有所帮助