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 相关文章推荐
用javascript获得地址栏参数的两种方法
Nov 08 Javascript
关于jQuery中的end()使用方法
Jul 10 Javascript
JS获取各种浏览器窗口大小的方法
Jan 14 Javascript
JavaScript控制网页层收起和展开效果的方法
Apr 15 Javascript
js实现仿微博滚动显示信息的效果
Dec 21 Javascript
原生javascript上传图片带进度条【实例分享】
Apr 06 Javascript
jquery请求servlet实现ajax异步请求的示例
Jun 03 jQuery
解决Linux无法正常安装与卸载Node.js的方法
Jan 19 Javascript
Node.js上传文件功能之服务端如何获取文件上传进度
Feb 05 Javascript
解决低版本的浏览器不支持es6的import问题
Mar 09 Javascript
15个顶级开源JavaScript框架和库
Oct 10 Javascript
javascript数组的定义及操作实例
Nov 10 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 simple_html_dom.php+正则 采集文章代码
2009/12/24 PHP
PHP中获取变量的变量名的一段代码的bug分析
2011/07/07 PHP
Php中文件下载功能实现超详细流程分析
2012/06/13 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
PHP使用NuSOAP调用Web服务的方法
2015/07/18 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
2016/11/14 PHP
最佳JS代码编写的14条技巧
2011/01/09 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
2014/05/28 Javascript
分享一个自己动手写的jQuery分页插件
2014/08/28 Javascript
使用ajax+jqtransform实现动态加载select
2014/12/01 Javascript
jQuery Validate验证框架经典大全
2015/09/23 Javascript
JS实现获取键盘按下的按键并显示在页面上的方法
2015/11/04 Javascript
jQuery中show与hide方法用法示例
2016/09/16 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
2017/01/03 Javascript
JavaScript实现实时更新系统时间的实例代码
2017/04/04 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
JavaScrpt的面向对象全面解析
2017/05/09 Javascript
AngularJS实现注册表单验证功能
2017/10/16 Javascript
jQuery实现动态显示select下拉列表数据的方法
2018/02/05 jQuery
Vue+axios实现统一接口管理的方法
2018/07/23 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
详解VUE单页应用骨架屏方案
2019/01/17 Javascript
详解package.json版本号规则
2019/08/01 Javascript
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
python psutil库安装教程
2018/03/19 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
python中sys.argv函数精简概括
2018/07/08 Python
python语言元素知识点详解
2019/05/15 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
2019/07/04 Python
python rsa-oaep加密的示例代码
2020/09/23 Python
租房安全协议书
2014/08/20 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
使用css样式设计一个简单的html登陆界面的实现
2021/03/30 HTML / CSS
海康机器人重磅发布全新算法开发平台VM4.2
2022/04/21 数码科技
python使用pycharm安装pyqt5以及相关配置
2022/04/22 Python