JavaScript中可用数组解构一行交换两变量值:[a, b] = [b, a];支持数字、字符串、布尔值及对象引用等,但对象交换为引用而非深拷贝;变量须用let声明,const不可重赋值。

JavaScript 中用解构赋值交换两个变量的值非常简洁,不需要临时变量,一行代码就能完成。
基础写法:直接用数组解构
这是最常用、最直观的方式:
let a = 1, b = 2; [a, b] = [b, a]; // 交换完成 console.log(a, b); // 输出:2 1
原理是先构建一个新数组 [b, a],再通过解构将其元素依次赋给 a 和 b。
适用于多种数据类型
解构交换不限于数字,字符串、布尔值、对象引用、数组等都适用:
立即学习“Java免费学习笔记(深入)”;
let x = "hello", y = "world"; [x, y] = [y, x];let p = true, q = false; [p, q] = [q, p];let obj1 = {}, obj2 = []; [obj1, obj2] = [obj2, obj1];
注意:它交换的是引用(对对象/数组而言),不是深拷贝。
在函数参数或返回值中顺带交换
解构还可嵌入更复杂的场景,比如交换后立即使用:
const swapAndDouble = (x, y) => ([y * 2, x * 2]); let m = 3, n = 4; [m, n] = swapAndDouble(m, n); // m=8, n=6
或者在解构函数返回的数组时自然完成交换:
const getPair = () => [10, 20]; let u, v; [u, v] = getPair().reverse(); // 直接拿到反转后的值 // 或更地道写法: [u, v] = [getPair()[1], getPair()[0]];
注意事项和常见误区
以下写法会报错或无效,需避免:
- ❌ let a=1,b=2; a,b = b,a; —— 缺少方括号,语法错误
- ❌ [a, b] = b, a; —— 右侧不是数组或可迭代对象
-
❌ const a=1, b=2; [a, b] = [b, a]; —— const 声明的变量不能重新赋值(但可以解构赋值给已有 const 变量?不,不行;const 变量本身不可重赋值,所以必须用
let或var)
正确前提:被交换的变量需用 let(或 var)声明,确保可重新赋值。


















