JS不能像Python那样直接交换
num1, num2 = num2, num1
下面介绍几种常用方法
临时变量
万能方法,缺点是引入了新的变量。
let temp = num1;
num1 = num2;
num2 = temp;
先加后减
无需引入第三个变量,但是如果有浮点数可能会损失精度。
num1 = num1 + num2;
num2 = num1 - num2;
num1 = num1 - num2;
先乘后除
原理类似,但是交换值不能有0
,否则导致分母为零返回NaN
。
num1 = num1*num2;
num2 = num1/num2;
num1 = num1/num2;
位运算异或
异或是按二进制位来工作,当我们有两个值不一样时,它的结果为1,否则为0。
num1 = num1^num2;
num2 = num1^num2;
num1 = num1^num2;
看一个例子:
let num1 = 10, // 四位二进制1010
num2 = 1; // 四位二进制0001
num1 = num1 ^ num2 = 1010 ^ 0001 = 1011;
num2 = num1 ^ num2 = 1011 ^ 0001 => 1010 => 10;
num1 = num1 ^ num2 = 1011 ^ 1010 => 0001 => 1;
这个方法的缺点是只对整数有效,对于浮点数会出现不正确的值。
数组中赋值
万能方法,数组的一个技巧,只需要一行就能交换。
num2 = [num1, num1 = num2][0];
解构赋值
推荐方法,同样只需要一行,而且具有Python那样的简洁性。
[num1, num2] = [num2, num1];
上面的代码中,先在等号右边创建了一个数组[num2, num1]
,然后等号左边利用解构赋值把数组中的值取出来,并且将num2
的值赋给num1
,将num1
的值赋给num2
。