以前遇到这个问题都是temp,或者es6解构赋值,偶尔在网上看到了一些方案。
总结几种办法来交换a和b的变量值
交换变量值方案一
最最最简单的办法就是使用一个临时变量了
不过使用临时变量的方法,虽然很low但很好理解也是刚学习编程语言式接触的一种命令式写法。
1 | var t; |
首先把a的值存储到临时变量中
然后b赋值给a
最后拿出临时变量中的a值赋给b
这个办法是最基本的了
交换变量值方案二
下面的方案都不会有临时变量
不使用临时变量的思路都是让其中一个变量变成一个a和b都有关系的值
这样可以先改变另一个变量值,
最后改变原修改的变量值
1 |
|
1) 让a先变成a与b的‘和’(也可以换成a和b的差,一样的)
2)‘和’减去b巧妙的得到了a的变量值赋予b
3)再通过‘和’减去b(a的值)得到了b的值赋予a
或者是下面的变式(差的形式)1
2
3a = a - b;
b = a + b;
a = b - a;
但是感觉和的形式更容易理解
交换变量值方案三
把a先变成了一个对象
这个对象保存着应该交换后的键值对
最后赋值搞定1
2
3a = {a: b,b: a};
b = a.b;
a = a.a;
交换变量值方案四
和上面的方法很像,只不过对象换成了数组1
2
3a = [a, b];
b = a[0];
a = a[1];
交换变量值方案五
1 | a = [b, b = a][0]; |
根据运算符优先级,首先执行b = a
此时的b直接得到了a的变量值
然后一步数组索引让a得到了b的值(简直不能再厉害)
交换变量值方案六
最后我的方案是利用了ES6的解构赋值语法
它允许我们提取数组和对象的值,对变量进行赋值
(旧版本浏览器不能使用ES6语法)1
[a,b] = [b,a];
可以看到解构赋值语法让我们的交换变量值变得超级简单
总结了这么多交换变量值的方法
不知道还有没有其他办法
虽然它是一个无关紧要的问题
不过可以练一练我们的脑洞