变量交换之数字交换

昨天一个前端群里有人出了一个问题,是关于javascript中变量交换的问题,自己私下好好研究了一番,总结如下:

数字交换可能是这里面方法最为丰富的一种了,因为可以用数学计算的方法来做,若是字符串、对象则不可以。

借助接三方变量

这大概是最直观的方法了。不过,这种方法又分为好几种形式。直接哪一个例子来说。

var a=1,b=2;

交换a,b的值。

var a = 1,
    b = 2;

1.借助变量temp来交换a,b的值,最常见的一种,不用多说。


var temp = a;
a = b;
b = temp;
console.log(a);   //2
console.log(b);   //1

2.借助一个匿名数组来交换a,b的值;也算是
[b,b = a][0] 根据赋值运算符的运算方向,先计算表达式右边;
[b,b = a] 把b,a放入一个匿名数组,第二个元素把a的值赋给b;
[b,b = a][0] 取出匿名数组第0个值即b;
a=[b,b = a][0] 将取出的值赋给a,交换完成。


a=[ b,b = a][0];
console.log(a);   //2
console.log(b);   //1

3.同上,借助一个匿名数组来交换a,b的值,只不过是写法不同;
不同的是,该方法利用逗号运算符(,)的特性将a的值赋给了b;
在js中,[b][b=a,0]第二个[]中是一个键值,首先将a的值赋给b,然后再进行逗号运算符的运算,最后取匿名数组[b]的第0个值赋给a,即b本身。


a = [b][b = a,0];
console.log(a);   //2
console.log(b);   //1

总结:当然还可以用显视数组或者对象交换,这些本质都是借助第三方变量,就不再多说。借助第三方变量的优点是不会出现溢出问题。

用数学计算来交换

var a = 1,
    b = 2;

1.求和,然后再求出两个变量;
缺点是存在溢出限制,一旦a+b的值超出了js中所能保存的极限,就会出错。


a += b;
b = a - b;
a -= b;
console.log(a);   //2
console.log(b);   //1

2.巧妙利用乘法。


a = b + (b = a)*0;
console.log(a);   //2
console.log(b);   //1

3.利用位运算;
不会出现溢出问题。


a^=b;
b^=a;//其实这一步是这样的b=b^(a^b)=b^b^a=0^a=a
a^=b;//同样a=a^b=(a^b)^a=b;
console.log(a);   //2
console.log(b);   //1

最后娱乐一下

这是最后一种方法,大家笑笑即好。


a=2;
b=1;
console.log(a);   //2
console.log(b);   //1

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值