七种方案解决 JavaScript 交换两个变量值的问题

2018/06/06

在编程中我们经常会遇到要交换两个变量的值的情况,最常用的应该是借助第三个变量来实现变量值的交换,下面我将介绍七种方案解决 JavaScript 交换两个变量值的问题

var a = 123
var b = 456

临时变量

最最最简单的办法就是使用一个临时变量了, 不过使用临时变量的方法实在是太 low 了

var t
t = a
a = b
b = t

首先把 a 的值存储到临时变量中

然后 b 赋值给 a

最后拿出临时变量中的 a 值赋给 b

这个办法是最基本的了

没有临时变量

下面的方案都不会有临时变量

我总结了一下

其实不使用临时变量的思路都是让其中一个变量变成一个 ab 都有关系的值

这样可以先改变另一个变量值

最后改变原修改的变量值

数值变量的和差

a = a + b
b = a - b
a = a - b

a 先变成 ab 的’和’(也可以换成 ab 的差,一样的)

‘和’减去 b 巧妙的得到了 a 的变量值赋予 b

再通过’和’减去 a 的值得到了 b 的值赋予 a

或者是下面的变式(差的形式)

a = a - b
b = a + b
a = b - a

位操作

a ^= b
b ^= a
a ^= b

C++ 甚至可以 a^=b^=a^=b 来完成任务 但我发现 JavaScript 不可以 不过我们可以这样

a = (b ^= a ^= b) ^ a

位操作只能用于整形数据,对 floatdouble 类型进行位操作会被编译器报错。

保存到对象中

a = {a: b, b: a}
b = a.b
a = a.a

保存到数组中

a = [a, b]
b = a[0]
a = a[1]

巧用数组

a = [b, b = a][0]

根据运算符优先级,首先执行 b = a

此时的 b 直接得到了 a 的变量值

然后一步数组索引让 a 得到了 b 的值

ES6

;[a, b] = [b, a]