JavaScript中可用数组解构一行交换两变量值:[a, b] = [b, a];本质是先计算右侧数组再按位置赋值,支持表达式、函数返回值等,要求左右结构匹配,且适用于const声明的变量。

JavaScript 中用数组解构交换两个变量的值,不需要临时变量,一行代码就能完成,简洁又直观。
基本写法:直接用方括号包裹变量名
把要交换的两个变量放在一对中括号里,再赋值给一个包含对应顺序值的数组(或已存在的数组):
let a = 10; let b = 20; [a, b] = [b, a]; // 交换完成 console.log(a, b); // 20 10
这行 [a, b] = [b, a] 的本质是:先计算右边的 [b, a] 得到新数组 [20, 10],再按位置依次赋值给左边的 a 和 b。
适用于任意可读取的值,不限于变量
右边不一定要是变量组成的数组,可以是表达式、函数返回值、甚至对象属性:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
立即学习“Java免费学习笔记(深入)”;
-
[x, y] = [y + 1, x - 1]—— 带运算的交换 -
[first, second] = getTwoValues()—— 从函数返回的数组解构并交换(如果函数返回[b, a]) -
[name, age] = Object.values(user)—— 先取值再按需重排赋值
注意:必须确保左右两侧结构匹配
解构赋值要求左右“形状”一致。常见错误包括:
- 左边是
[a, b],右边是[b]或[b, a, c]→ 不报错但可能赋值为undefined - 对
const声明的变量,不能重新赋值整个变量,但解构赋值允许(因为不是改const变量本身,而是更新其绑定的值) - 若想交换对象属性,需先解构出值,再重新赋值,例如:
({x, y} = {x: y, y: x})不合法;应写成({x, y} = {x: obj.y, y: obj.x})或直接用数组解构中转
对比传统方法,优势明显
不用临时变量,不涉及算术运算(避免溢出或精度问题),语义清晰:
// 传统方式(冗余且易错) let temp = a; a = b; b = temp; <p>// 解构方式(推荐) [a, b] = [b, a];
这个技巧在循环遍历、算法实现(如冒泡排序)、状态切换等场景中非常实用。

















