分配和扩展数组有什么区别?

Tia*_*ivo 3 javascript arrays

最近,我在一次挑战练习中发现:

let array = [1, 2, 3, 4, 5]

let x = array
let y = [...array]

console.log(x, y);
Run Code Online (Sandbox Code Playgroud)

xy在理论上看起来是一样的,但显然引擎盖下,因为一个通过测试和其他没有,他们是不一样的。

我在这里想念什么吗?到目前为止,分配和传播对我来说几乎是同一件事。

谢谢

T.J*_*der 6

let x = array;只是使x变量和array变量都指向同一数组:

数组??? +
        | + ????????? +
        + ???> | (数组)|
        | + ????????? +
x ??????? + | 0:1 |
             | 1:2 |
             | 2:3 |
             | 3:4 |
             | 4:5 |
             + ????????? +

let y = [...array];创建一个数组并将所有条目复制array到其中。

             + ????????? +
数组???????> | (数组)|
             + ????????? +
             | 0:1 |
             | 1:2 |
             | 2:3 |
             | 3:4 |
             | 4:5 |
             + ????????? +

             + ????????? +
y ????????????> | (数组)|
             + ????????? +
             | 0:1 |
             | 1:2 |
             | 2:3 |
             | 3:4 |
             | 4:5 |
             + ????????? +

由于数组是可变的(可以更改其状态),因此这很重要,因为如果要进行更改并且不想更改原始数组,则需要第二个(或类似的),而不是第一个。


值得注意的是,let y = [...array];即使array不是一个数组,只要它是可迭代的,它也会创建一个数组,因为任何可迭代的对象都可以以这种方式传播。例如,let y = [..."foo"];创建一个像这样的数组:["f", "o", "o"]因为字符串是可迭代的。