JavaScript中可用数组解构赋值一行交换两个变量值,如[a, b] = [b, a];支持字符串、布尔、对象等类型;需确保左右均为可解构表达式,未声明变量需先声明。

JavaScript 中用解构赋值交换两个变量的值,无需临时变量,一行代码就能完成,既简洁又易读。
基础写法:数组解构直接交换
利用数组解构的顺序匹配特性,把两个变量“打包”成数组再“拆开”到新顺序中:
let a = 10; let b = 20; [a, b] = [b, a]; // 交换完成:a 是 20,b 是 10
这行代码本质是先计算右侧 [b, a] 得到新数组 [20, 10],再按位置依次赋值给左侧的 a 和 b。
适用多种数据类型
解构交换不依赖类型,字符串、布尔、对象、数组甚至 undefined 都能照常工作:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
-
let x = "hello", y = "world"; [x, y] = [y, x];→x === "world" -
let p = true, q = false; [p, q] = [q, p];→p变为false -
let obj1 = {a:1}, obj2 = {b:2}; [obj1, obj2] = [obj2, obj1];→ 引用交换,不深拷贝
注意事项与常见误区
几个关键点避免踩坑:
- 左右两边都必须是可解构的表达式;不能写成
[a, b] = b, a(缺少方括号包裹) - 若变量未声明,需用
let或const声明后再解构,或统一用let [a, b] = [b, a]形式(但此时 a、b 需已存在) - 不适用于交换对象属性本身(如
obj.x和obj.y),需先提取再赋值:[obj.x, obj.y] = [obj.y, obj.x]
扩展:多个变量轮换也一样自然
三个或更多变量的循环交换同样清晰:
let x = 1, y = 2, z = 3; [x, y, z] = [y, z, x]; // x→2, y→3, z→1
逻辑一目了然,比嵌套临时变量可读性强得多。

















