数组解构赋值 [a, b] = [b, a] 是推荐的标准交换方式,不依赖数据类型、语义清晰、安全可靠,适用于任意类型,但要求变量用 let 或 var 声明,不可用于 const。

最直接的方式就是用数组解构赋值一行完成:[a, b] = [b, a]。它不依赖数据类型,语义清晰,是当前推荐的标准做法。
为什么这行代码能交换值
解构赋值本质是“模式匹配”:等号右边先生成一个新数组 [b, a](此时值已按目标顺序排列),再按位置把元素依次赋给左边变量。整个过程没有隐式类型转换或副作用,安全可靠。
- 右边
[b, a]是临时数组,内容为当前b和a的值 - 左边
[a, b]按索引 0→a、1→b接收对应值 - 执行完后,
a得到原b的值,b得到原a的值
适用范围广,不限于数字
这个写法对任意类型都有效——字符串、布尔值、对象、数组、null、undefined 都可以正常交换。
-
let a = "hello", b = {x: 1}; [a, b] = [b, a];→a变成对象,b变成字符串 - 交换对象引用时,不触发深拷贝,性能无损耗
- 不涉及数学运算,不存在溢出、精度丢失或
NaN问题
和其他方法对比的关键优势
相比老式临时变量或算术运算,解构交换更简洁、更安全、更易读。
立即学习“Java免费学习笔记(深入)”;
- 不用声明第三个变量,减少作用域污染
- 不像加减法那样仅限数字,也不怕
Infinity或NaN - 不像异或(
^)那样只适用于整数,且可读性差 - 语法层级统一,和函数返回多值、参数解构等保持风格一致
实际使用小提醒
确保两边都是可写的变量,且不能用于 const 声明的常量(因为交换会重新赋值)。
- ✅ 正确:
let a = 1; let b = 2; [a, b] = [b, a]; - ❌ 错误:
const a = 1, b = 2; [a, b] = [b, a];(报错:Assignment to constant variable) - ⚠️ 注意:若变量未声明,需提前用
let或var定义,不能直接解构赋值未声明标识符


















