# 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 完成交换
大厂最新技术学习分享群
微信扫一扫进群,获取资料
X