JS交换变量常用的方法

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

参考:
JavaScript 交换值的奇思妙想

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值