Loading... **前言** 今天看到群里面一个童鞋温习js基础教程,有这么一个东西,就是交换ab变量值 所以我总结了七种办法来交换a和b的变量值 ```js var a = 123; var b = 456; ``` **交换变量值方案一** 最最最简单的办法就是使用一个临时变量了,不过使用临时变量的方法实在是太low了 ```js var t; t = a; a = b; b = t; ``` 首先把a的值存储到临时变量中,然后b赋值给a,最后拿出临时变量中的a值赋给b,这个办法是最基本的了 **交换变量值方案二** 下面的方案都不会有临时变量,我总结了一下,其实不使用临时变量的思路都是让其中一个变量变成一个a和b都有关系的值,这样可以先改变另一个变量值, 最后改变原修改的变量值 **比如这个** ```js a += b; b = a - b; a -= b; ``` 让a先变成a与b的‘和'(也可以换成a和b的差,一样的) ,‘和'减去b巧妙的得到了a的变量值赋予b ,再通过‘和'减去a的值得到了b的值赋予a,或者是下面的变式(差的形式) ```js a -= b; b = a + b; a = b - a; ``` 但是感觉和的形式更容易理解 **交换变量值方案三** 这种方法对于第一次学习JavaScript的同学来说可能不了解,因为我们JavaScript很少会用到位操作,这是我在以前看算法竞赛书的时候学来的,通过底层位运算来进行交换变量值,也是上面的方案演化来的 ```js a ^= b; b ^= a; a ^= b; ``` 了解一下吧,C++甚至可以`a^=b^=a^=b`来完成任务,但我发现JavaScript不可以 不过我们可以这样 ```js a = (b^=a^=b)^a; ``` **交换变量值方案四** 把a先变成了一个对象,这个对象保存着应该交换后的键值对,最后赋值搞定 ```js a = {a:b,b:a}; b = a.b; a = a.a; ``` **交换变量值方案五** 和上面的方法很像,只不过对象换成了数组 ```js a = [a,b]; b = a[0]; a = a[1]; ``` **交换变量值方案六** 这个办法十分的巧妙,不是我想出来的,想出来的人一定是大神,除非他是托梦想出来的,简单粗暴一行代码交换了a和b的变量值 ```JavaScript a = [b,b=a][0]; ``` 根据运算符优先级,首先执行`b=a`,此时的b直接得到了a的变量值,然后一步数组索引让a得到了b的值(简直不能再厉害) **交换变量值方案七** 最后我的方案是利用了ES6的解构赋值语法,它允许我们提取数组和对象的值,对变量进行赋值,不过我现在测试用的chrome浏览器已经实现了 ```js [a,b] = [b,a]; ``` 最后修改:2021 年 11 月 19 日 © 允许规范转载 打赏 赞赏作者 微信 赞 0 如果觉得我的文章对你有用,请随意赞赏