最简洁高效的方式是使用解构赋值:let a = 10, b = 20; [a, b] = [b, a];它语义清晰、安全通用,适用于任意类型,无溢出或精度问题,且现代引擎优化良好。

JavaScript 中交换两个变量的值,最简洁高效的方式是使用解构赋值(ES6+),无需临时变量,也避免了算术或位运算的限制与风险。
用解构赋式一步交换(推荐)
这是现代 JavaScript 的标准做法,语义清晰、安全通用,适用于任意类型(数字、字符串、对象、数组等):
let a = 10, b = 20;
[a, b] = [b, a]; // 直接交换
console.log(a, b); // 20, 10
- 本质是先计算右侧数组([b, a]),生成新数组 [20, 10],再按顺序解构赋值给左侧变量
- 不依赖数据类型,不会溢出、丢失精度,也不修改原值
- 可扩展:[x, y, z] = [z, x, y] 同样适用
用算术运算交换(仅限数字,慎用)
例如 a = a + b; b = a - b; a = a - b。看似巧妙,但有明显缺陷:
- 只适用于数值,对字符串、null、undefined 会得到意外结果(如 "10" + "20" → "1020")
- 浮点数可能因精度丢失导致误差
- 整数过大时可能溢出(虽在 JS 中较少见,但逻辑不健壮)
用异或运算交换(仅限整数,已过时)
a = a ^ b; b = a ^ b; a = a ^ b。这是 C 语言时代的技巧,在 JS 中完全没必要:
- 只支持整数,且要求变量为纯数字(NaN、Infinity 会失败)
- 代码可读性差,维护成本高
- 现代引擎对解构优化极好,性能差距可忽略
函数封装不是必须,但可统一风格
如果项目中频繁交换,可封装一个纯函数提升可读性:
const swap = (arr, i, j) => ([arr[i], arr[j]] = [arr[j], arr[i]]);
// 交换数组中两个位置的元素
const nums = [1, 2, 3];
swap(nums, 0, 2); // [3, 2, 1]
- 不建议为简单变量交换专门写函数,反而增加调用开销
- 适合操作数组、对象属性等结构化场景
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











