这是一道经常前端出去面试的时候,会被问到的题目,虽然很简单,但是如果没有准备的话,回答不上来,依旧还是很尴尬的
方法1-使用一个临时变量
这种方法是使用一个第三方临时变量,进行数据交换过程中的缓存,这样做是比较直观,但是会增加内存的使用
var a = 1,
b = 2,
tmp;
tmp = a;
a = b;
b = tmp;
方法2-使用Es6中的解构
在Es6当中提供一个非常暴力的解决办法,一次性解决,简单暴力
解构语法还使用其他类型的变量进行互换
let a = 1,
b = 2;
[a,b] = [b,a];
方法3-利用数组的特性进行交换
var a = 1,
b = 2;
a = [a,b]
b = a[0];
a = a[1];
通过数组下标,取值的方式,完成两数的交换
方法4-使用算数运算
通过算术运算过程中的技巧,完成两个值的交换,但这个有缺点,就是会存在数据溢出
var a = 1,
b = 2;
a = a+b; // a = 3
b = a-b; // b = 1;
a = a-b; // a = 2;
方法5-异或运算
巧用位运算符的技巧,利用a^b^b == a
的特点,进行数值交换,避免了使用算术运算带来的弊端,不会发生溢出问题
var a = 1, // 二进制0001
b = 2; // 二进制:0010
a = a^b; // 计算结果: a=0011,b = 0010
b = a^b; // 计算结果 a=0011,b=0001
a = a^b; // 计算结果: a=0010,b=0001
可以使用new Number(具体的数字).toString(需要转化进制数)
,例如:new Number(10).toString(2)
,将10转化为2进制是1010
建议在实际开发中不要使用这种方式,代码变得非常难以理解,维护性差,可阅读性低
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END