JavaScript两个变量交换值

227 阅读1分钟

面试中遇到过的问题:JS交换2个变量的值

一、使用第三个变量的情况:

var a = 1;
var b = 2;
var c;
c = a;
a = b;
b = c;
console.log(a,b);

以上,通过c实现了变量值交换效果。这样的做法直观,易懂。但是,会增加内存的使用。

二、不使用第三个变量的情况

1. 算术运算

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

通过算术运算过程中的技巧,可以巧妙地将两个值进行互换。但是,有个缺点就是变量数据溢出。因为JavaScript能存储数字的精度范围是 -253 到 253。所以,加法运算,会存在溢出的问题。
2. 异或运算

var a=1,b=2;
a=a^b;
b=a^b;
a=a^b;
console.log(a);
console.log(b);

本题巧用位运算的技巧,利用 a ^ b ^ b == a 的特点,进行数值交换,避免了使用算术运算带来的弊端,不会发生溢出问题。
“^”运算符:
c.biancheng.net/view/5469.h…
3. ES6解构

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

用解构的语法特性,一次性解决
更重要的一点:解构语法还适用于其他类型的变量进行互换。所以,用解构可以很easy地进行互换。
4. 利用数组特性进行交换

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

参考了:www.jianshu.com/p/90ce596f1…