解构赋值

在 JavaScript 中,解构赋值(destructuring assignment)不仅能方便地从数组或对象中提取值,还能用来实现变量交换(swap)——免去引入临时变量的麻烦。
1. 变量交换(swap)
传统情况
最常见的交换两变量写法是这样:
1 | let a = 1; |
我们借助了一个中间 “temp” 变量来暂存其中一个的值,才避免覆盖。
利用解构直接交换
解构模式的右侧可以是任意表达式,包括另一个数组字面量。
1 | let a = 1; |
发生了什么?
-
右侧先计算出一个数组
[b, a]
,此时是[2, 1]
。 -
然后左侧解构把这个数组的第一个元素赋给
a
,第二个元素赋给b
。
这样,就在一行里完成了交换,且没有显式的临时变量。
2. 解构赋值的基本语法
数组解构
1 | const arr = [10, 20, 30]; |
左侧的 [x, y, z]
就像一个模式(pattern),会把右侧数组里的元素逐一取出,赋给对应的变量。
其他
TODO
3. 注意事项
-
原子性
解构赋值在规范中是先计算右侧,再做赋值,所以不存在覆盖问题。 -
不可嵌套在声明里同时用
如果你用let [a, b] = [b, a]
,这是声明新变量 a、b,而右侧的 b、a 需先有定义,否则会报错。通常交换时,a、b 已存在,只写[a, b] = [b, a]
。 -
性能
虽然解构写法看起来美观,但在性能极端敏感场景(如超大数组的热循环)中,解构会构造临时数组,造成额外开销。在变量交换任务中解构的性能低于使用临时变量。
- 标题: 解构赋值
- 作者: 三葉Leaves
- 创建于 : 2025-05-09 00:00:00
- 更新于 : 2025-05-26 02:57:24
- 链接: https://blog.oksanye.com/03b674ce4186/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论