JavaScript中可用解构赋值一行交换两个变量值:[a, b] = [b, a];支持数字、字符串、对象引用等类型,原理是右侧生成新数组后按序赋值;还可实现多变量轮换或部分交换,但需确保左右结构匹配且右侧为可迭代对象。

JavaScript 中利用解构赋值交换两个变量的值,无需临时变量,写法简洁直观。
基础语法:一行完成交换
传统方式需要借助中间变量,而解构赋值通过数组或对象的结构匹配,直接重新绑定变量名与值:
let a = 1, b = 2;
a = [b, b = a][0]; // 不推荐,可读性差
正确、清晰的写法是:
立即学习“Java免费学习笔记(深入)”;
let a = 1, b = 2;
[a, b] = [b, a]; // ✅ 解构赋值交换
执行后 a 变为 2,b 变为 1。原理是右侧先生成新数组 [2, 1],左侧按顺序将元素分别赋给 a 和 b。
支持多种数据类型
解构交换不仅适用于数字,也适用于字符串、布尔值、对象引用、数组等(注意:交换的是引用,不是深拷贝):
-
字符串交换:
let x = "hello", y = "world"; [x, y] = [y, x]; -
对象交换:
let obj1 = {id: 1}, obj2 = {id: 2}; [obj1, obj2] = [obj2, obj1];(交换的是引用地址) -
混合类型也可行:
let m = 42, n = "abc"; [m, n] = [n, m]; // m → "abc", n → 42
扩展:多个变量轮换或部分交换
解构赋值还能实现更灵活的重排:
-
三变量轮换:
[a, b, c] = [b, c, a]; -
只交换其中两个(忽略第三个):
let p = 1, q = 2, r = 3; [p, , r] = [r, q, p]; // p=3, q不变, r=1 -
从函数返回值直接交换:
const swap = () => [b, a]; [a, b] = swap();
注意事项
使用时需确保左右两侧结构可匹配,否则会报错或产生 undefined:
- 左侧必须是可解构的模式(如数组、对象),不能是字面量或常量
- 右侧表达式必须求值为可迭代对象(如数组、字符串、Map 等),普通对象默认不可迭代,需用
Object.entries()等辅助 - 不能对
const声明的变量重复赋值,但可用于初始化时交换:const [x, y] = [1, 2]; const [y, x] = [x, y]; ❌ 报错;应改用 <code>let


















