# JS 变量交换的 5 种方法

# 方法一:算术运算法

实现原理:

把 a、b 看做数轴上的点,围绕两点间的距离来进行计算。

var a = 8;
var b = 6;

a = b - a;
b = b - a;
a = b + a;

console.log("a:" + a + " ,b:" + b); // 输出 a:6 ,b:8 交换成功

具体过程:

  • 第一句“a=b-a”求出 ab 两点的距离,并且将其保存在 a 中
  • 第二句“b=b-a”求出 a 到原点的距离(b 到原点的距离与 ab 两点距离之差),并且将其保存在 b 中
  • 第三句“a=b+a”求出 b 到原点的距离(a 到原点距离与 ab 两点距离之和),并且将其保存在 a 中

完成交换 !

# 方法二:借助数组特性交换

实现原理:

借助数组的下标及运算符的优先级实现

var a = 1,
  b = 2;

a = [a, b]; // 让 a 变成数组
b = a[0]; // 先取出 b
a = a[1]; // 再覆盖 a

console.log("a:" + a + " ,b:" + b); // 输出 a:2 ,b:1 完成交换

# 方法三:位运算

代码实现

var a = 1, // 二进制:0001
  b = 2; // 二进制 0010

a ^= b; // a = a ^ b = 1 ^ 2 = 3
b ^= a; // b = b ^ (a ^ b) = 2 ^ (1 ^ 2) = 1
a ^= b;

console.log("a:" + a + " ,b:" + b); // 输出 a:2 ,b:1 完成交换

实现原理:

  • ^运算符跟|类似,但有一点不同的是如果两个操作位都为 1 的话,结果产生 0
  • 1 的二进制表示为 0 0 0 0 0 0 1
  • 3 的二进制表示为 0 0 0 0 0 1 1
  • 所以 1 ^ 3的结果为2

# 方法四:ES6 的解构

用解构的语法特性,一次性解决,简单粗暴 !

  • 更重要的一点:解构语法还适用于其他类型的变量进行互换。
  • 所以,用解构可以很 easy 地进行互换。
let a = 1,
  b = 2;

[a, b] = [b, a];

console.log("a:" + a + " ,b:" + b); // 输出 a:2 ,b:1 交换完成

# 方法五:借助对象的键值对

实现原理:

把 a 先变成了一个对象,这个对象保存着应该交换后的键值对,最后赋值搞定

var a = 1,
  b = 2;

a = { a: b, b: a };
b = a.b;
a = a.a;

console.log("a:" + a + " ,b:" + b); // 输出 a:2 ,b:1 完成交换
上次更新时间: 6/8/2023, 9:23:17 PM

大厂最新技术学习分享群

大厂最新技术学习分享群

微信扫一扫进群,获取资料

X