javascript中可用异或运算符(^)原地交换两个整数变量,原理基于a^a=0、a^0=a和结合律,但仅适用于整数,不适用于浮点数、nan、对象等,且可读性差,现代开发推荐解构赋值[a,b]=[b,a]。

JavaScript 中可以用按位异或运算符(^)实现两个数值变量的原地交换,无需临时变量,但**仅适用于整数且需满足特定条件**。
原理:异或的数学性质
异或运算满足三条关键性质:
- a ^ a = 0(相同数异或得 0)
- a ^ 0 = a(与 0 异或不变)
- a ^ b ^ b = a(异或满足结合律和交换律)
因此,对两个整数 a 和 b,执行以下三步可完成交换:
b = a ^ b;
a = a ^ b;
实际写法示例
假设初始值:let a = 5, b = 9;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
a = a ^ b; // a → 5 ^ 9 = 12<br>b = a ^ b; // b → 12 ^ 9 = 5(原 a 值)<br>a = a ^ b; // a → 12 ^ 5 = 9(原 b 值)
执行后:a === 9,b === 5,完成交换。
注意事项与限制
-
只适用于整数:JavaScript 中浮点数在按位运算中会被自动转为 32 位有符号整数,小数部分丢失,如
3.7 ^ 2.1实际计算的是3 ^ 2; -
不适用于 NaN、Infinity、null、undefined 或非数字值:这些值参与异或会变成
0或引发隐式转换错误; -
可读性差、易出错:相比
[a, b] = [b, a]或临时变量,异或交换难理解、难调试,现代代码中不推荐使用; - 无法用于对象、数组等引用类型:异或只对数值有意义。
更推荐的替代方式
现代 JavaScript 应优先选择清晰安全的方式:
- 解构赋值(最简洁):
[a, b] = [b, a]; - 临时变量(兼容性最好):
const temp = a; a = b; b = temp;
异或交换属于技巧性写法,了解原理即可,日常开发中不必刻意使用。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










