最近,我在一次挑战练习中发现:
let array = [1, 2, 3, 4, 5]
let x = array
let y = [...array]
console.log(x, y);
Run Code Online (Sandbox Code Playgroud)
x而y在理论上看起来是一样的,但显然引擎盖下,因为一个通过测试和其他没有,他们是不一样的。
我在这里想念什么吗?到目前为止,分配和传播对我来说几乎是同一件事。
谢谢
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"]因为字符串是可迭代的。
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |