在编程中我们经常会遇到要交换两个变量的值的情况,最常用的应该是借助第三个变量来实现变量值的交换,下面我将介绍七种方案解决 JavaScript 交换两个变量值的问题
var a = 123
var b = 456
临时变量
最最最简单的办法就是使用一个临时变量了, 不过使用临时变量的方法实在是太 low 了
var t
t = a
a = b
b = t
首先把 a
的值存储到临时变量中
然后 b
赋值给 a
最后拿出临时变量中的 a
值赋给 b
这个办法是最基本的了
没有临时变量
下面的方案都不会有临时变量
我总结了一下
其实不使用临时变量的思路都是让其中一个变量变成一个 a
和 b
都有关系的值
这样可以先改变另一个变量值
最后改变原修改的变量值
数值变量的和差
a = a + b
b = a - b
a = a - b
让 a
先变成 a
与 b
的’和’(也可以换成 a
和 b
的差,一样的)
‘和’减去 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
位操作只能用于整形数据,对 float
和 double
类型进行位操作会被编译器报错。
保存到对象中
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]