变量交换之数字交换
2015-11-29 21:25
525 查看
昨天一个前端群里有人出了一个问题,是关于javascript中变量交换的问题,自己私下好好研究了一番,总结如下:
数字交换可能是这里面方法最为丰富的一种了,因为可以用数学计算的方法来做,若是字符串、对象则不可以。
交换a,b的值。
1.借助变量temp来交换a,b的值,最常见的一种,不用多说。
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,交换完成。
3.同上,借助一个匿名数组来交换a,b的值,只不过是写法不同;
不同的是,该方法利用逗号运算符(,)的特性将a的值赋给了b;
在js中,[b=a,0]第二个[]中是一个键值,首先将a的值赋给b,然后再进行逗号运算符的运算,最后取匿名数组[b]的第0个值赋给a,即b本身。
[b]总结:当然还可以用显视数组或者对象交换,这些本质都是借助第三方变量,就不再多说。借助第三方变量的优点是不会出现溢出问题。
1.求和,然后再求出两个变量;
缺点是存在溢出限制,一旦a+b的值超出了js中所能保存的极限,就会出错。
2.巧妙利用乘法。
3.利用位运算;
不会出现溢出问题。
数字交换可能是这里面方法最为丰富的一种了,因为可以用数学计算的方法来做,若是字符串、对象则不可以。
借助接三方变量
这大概是最直观的方法了。不过,这种方法又分为好几种形式。直接哪一个例子来说。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=a,0]第二个[]中是一个键值,首先将a的值赋给b,然后再进行逗号运算符的运算,最后取匿名数组[b]的第0个值赋给a,即b本身。
a = [b][b = a,0]; console.log(a); //2 console.log(b); //1
[b]总结:当然还可以用显视数组或者对象交换,这些本质都是借助第三方变量,就不再多说。借助第三方变量的优点是不会出现溢出问题。
用数学计算来交换
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
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享
- 如何创建对象以及jQuery中创建对象的方式
- IE8开发人员工具教程(二)
- 在flex中执行一个javascript方法的简单方式