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


Posted in Javascript onDecember 01, 2016

前言

这篇文章总结了七种办法来交换a和b的变量值

var a = 123;
var b = 456;

交换变量值方案一

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

var t;
t = a;
a = b;
b = t;

首先把a的值存储到临时变量中,然后b赋值给a,最后拿出临时变量中的a值赋给b,这个办法是最基本的了

交换变量值方案二

下面的方案都不会有临时变量,我总结了一下,其实不使用临时变量的思路都是让其中一个变量变成一个a和b都有关系的值,这样可以先改变另一个变量值, 最后改变原修改的变量值

比如这个

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

让a先变成a与b的‘和'(也可以换成a和b的差,一样的) ,‘和'减去b巧妙的得到了a的变量值赋予b ,再通过‘和'减去a的值得到了b的值赋予a,或者是下面的变式(差的形式)

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

但是感觉和的形式更容易理解

交换变量值方案三

这种方法对于第一次学习JavaScript的同学来说可能不了解,因为我们JavaScript很少会用到位操作,这是我在以前看算法竞赛书的时候学来的,通过底层位运算来进行交换变量值,也是上面的方案演化来的

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

了解一下吧,C++甚至可以a^=b^=a^=b来完成任务,但我发现JavaScript不可以

不过我们可以这样

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

交换变量值方案四

把a先变成了一个对象,这个对象保存着应该交换后的键值对,最后赋值搞定

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

交换变量值方案五

和上面的方法很像,只不过对象换成了数组

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

交换变量值方案六

这个办法十分的巧妙,不是我想出来的,想出来的人一定是大神,除非他是托梦想出来的,简单粗暴一行代码交换了a和b的变量值

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

根据运算符优先级,首先执行b=a,此时的b直接得到了a的变量值,然后一步数组索引让a得到了b的值(简直不能再厉害)

交换变量值方案七

最后我的方案是利用了ES6的解构赋值语法,它允许我们提取数组和对象的值,对变量进行赋值,不过我现在测试用的chrome浏览器已经实现了

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

可以看到解构赋值语法让我们的交换变量值变得超级简单,这个解构赋值语法要是讲的话要讲很多不是今天的重点,以后会在再总结现在就不讲了

总结

本文提到了这么多交换变量值的方法,不知道还有没有其他办法,虽然它是一个无关紧要的问题,不过可以练一练我们的脑洞。希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
JS与框架页的操作代码
Jan 17 Javascript
基于jquery的让页面控件不可用的实现代码
Apr 27 Javascript
鼠标滑在标题上显示图片的JS代码
Nov 19 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
Aug 08 Javascript
基于jQuery实现的QQ表情插件
Aug 25 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
Aug 05 Javascript
vue loadmore 组件滑动加载更多源码解析
Jul 19 Javascript
ReactNative Image组件使用详解
Aug 07 Javascript
微信小程序自定义组件
Aug 16 Javascript
vue以组件或者插件的形式实现throttle或者debounce
May 22 Javascript
微信小程序image图片加载完成监听
Aug 31 Javascript
高性能js数组去重(12种方法,史上最全)
Dec 21 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
Dec 01 #Javascript
实例解析jQuery工具函数
Dec 01 #Javascript
Vue.js实现简单ToDoList 前期准备(一)
Dec 01 #Javascript
获取jqGrid中选择的行的数据
Nov 30 #Javascript
基于Vue.js实现简单搜索框
Mar 26 #Javascript
深入理解jQuery.data() 的实现方式
Nov 30 #Javascript
利用vue-router实现二级菜单内容转换
Nov 30 #Javascript
You might like
刚才在简化php的库,结果发现很多东西
2006/12/31 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
PHP实现中文圆形印章特效
2015/06/19 PHP
PHP定时执行任务实现方法详解(Timer)
2015/07/30 PHP
jQuery UI 应用不同Theme的办法
2010/09/12 Javascript
快速排序 php与javascript的不同之处
2011/02/22 Javascript
js简单实现标签云效果实例
2015/08/06 Javascript
javascript数组去重的六种方法汇总
2015/08/16 Javascript
JavaScript数据类型学习笔记
2016/01/25 Javascript
jQuery解析返回的xml和json方法详解
2017/01/05 Javascript
详解vue表单验证组件 v-verify-plugin
2017/04/19 Javascript
jquery实现一个全局计时器(商城可用)
2017/06/30 jQuery
JS非空验证及邮箱验证的实例
2017/08/11 Javascript
Three.js基础学习之场景对象
2017/09/27 Javascript
vue.js $refs和$emit 父子组件交互的方法
2017/12/20 Javascript
vue项目中引入noVNC远程桌面的方法
2018/03/05 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
2018/05/29 Javascript
Vue.js图片预览插件使用详解
2018/08/27 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
教你30秒发布一个TypeScript包到NPM的方法步骤
2019/07/22 Javascript
js+canvas实现刮刮奖功能
2020/09/13 Javascript
[01:13:51]TNC vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[01:13:17]Secret vs NB 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python中的json总结
2018/10/11 Python
python实现大战外星人小游戏实例代码
2019/12/26 Python
如何在 Django 模板中输出 "{{"
2020/01/24 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
HTML页面中添加Canvas标签示例
2015/01/01 HTML / CSS
美国办公用品折扣网站:Shoplet.com
2019/11/24 全球购物
信息专业本科生个人的自我评价
2013/10/28 职场文书
读书演讲主持词
2014/03/18 职场文书
四年级评语大全
2014/04/21 职场文书
理想点亮人生演讲稿
2014/05/21 职场文书
乡镇平安建设汇报材料
2014/08/25 职场文书
2014年妇联工作总结
2014/11/21 职场文书
OpenFeign实现远程调用
2022/08/14 Java/Android