交换两个数的几种方法对比
(1) 需要第三方变量,开发推荐使用这种
var m = 10;
var n = 20;
var temp = m;
m = n;
n = temp;
console.log(m, n) // 20, 10
(2) 不需要第三方变量, 这种有弊端, 有可能会超出数值取值范围,特别是在强类型语言中。
var m = 100;
var n = 200;
m = m + n;
n = m - n;
m = m - n;
console.log(m, n) // 200, 100
(3) 不需要第三方变量,使用位运算符 ^ 按位异或
var m = 100;
var n = 200;
m = m ^ n;
n = m ^ n;
m = m ^ n;
console.log(m, n)
一个数据对另一个数据位异或两次,该数本身不变,而且与顺序无关,即支持交换律:
var a = 10
var b = 5
console.log(a ^ a ^ b) // 5
console.log(a ^ b ^ a) // 5
console.log(b ^ a ^ a) // 5
// 扩展:一个数据对另一个数据位异或偶数次(>=2),该数本身不变
console.log(b ^ a ^ a ^ a ^ a) // 5
(4) JS数组的解构赋值
var a = 10;
var b = 5;
[a, b] = [b, a]
// 解构赋值是一种语法糖,他会被编译为如下代码:
var _a;
var a = 10;
var b = 5;
_a = [b, a], a = _a[0], b = _a[1];