You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中不使用临时变量交换任意类型的变量?

不使用第三个变量交换任意类型变量的实现方法

你提到的通过加减操作交换整数的方法,只适用于数值类型,没法处理字符串、对象、数组这类非数值类型的变量。下面介绍几种通用的、能交换任意类型变量的方法:

1. ES6解构赋值(最简洁推荐)

这是现代JavaScript里最直观且通用的方式,支持所有数据类型的变量交换,代码可读性拉满。

示例代码:

let x = "hello world";
let y = { age: 25 };

// 一行完成交换
[x, y] = [y, x];

console.log(x); // { age: 25 }
console.log(y); // "hello world"

原理:JS引擎会在底层临时存储右侧数组的元素,再依次赋值给左侧变量,代码层面不需要你显式声明第三个临时变量。

2. 数组/对象中转(兼容旧环境)

如果需要兼容不支持ES6的老环境,可以用数组或对象间接实现交换,同样不需要自己声明临时变量:

数组中转写法:

let x = [1, 3, 5];
let y = false;

// 利用数组的索引取值完成交换
x = [y, y = x][0];

console.log(x); // false
console.log(y); // [1, 3, 5]

对象中转写法:

let x = 3.14;
let y = "foo";

// 借助对象解构完成交换
({x, y} = {x: y, y: x});

console.log(x); // "foo"
console.log(y); // 3.14

额外提醒

  • 加减/乘除的算术交换法不仅局限于数值类型,还存在溢出风险(比如超大整数相加超出Number的安全范围),不适合通用场景。
  • 解构赋值是当前最优解,既简洁又能覆盖所有数据类型的交换需求。

内容的提问来源于stack exchange,提问作者Michael Lorton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 03:24:27