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动态给table添加/删除tr的方法
Aug 02 Javascript
ParseInt函数参数设置介绍
Jan 02 Javascript
JS应用正则表达式转换大小写示例
Sep 18 Javascript
jQuery实现响应浏览器缩放大小并改变背景颜色
Oct 31 Javascript
bootstrap改变按钮加载状态
Dec 01 Javascript
jQuery插件编写步骤详解
Jun 03 Javascript
jQuery实现按比例缩放图片的方法
Apr 29 jQuery
JavaScript时间戳与时间日期间相互转换
Dec 11 Javascript
解决vuecli3.0热更新失效的问题
Sep 19 Javascript
js实现淘宝首页的banner栏效果
Nov 26 Javascript
2019最新21个MySQL高频面试题介绍
Feb 06 Javascript
JS前端宏任务微任务及Event Loop使用详解
Jul 23 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
正确的PHP匹配UTF-8中文的正则表达式
2015/05/13 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
各浏览器对click方法的支持差异小结
2011/07/31 Javascript
jquery ajax请求实例深入解析
2012/11/26 Javascript
jQuery中extend()和fn.extend()方法详解
2015/06/03 Javascript
jQuery实现下拉框左右移动(全部移动,已选移动)
2016/04/15 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
2016/04/20 Javascript
JS实现颜色梯度与渐变效果完整实例
2016/12/30 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
2017/01/06 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
nodejs+express实现文件上传下载管理网站
2017/03/15 NodeJs
vue项目中导入swiper插件的方法
2018/01/30 Javascript
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
微信小程序input框中加入小图标的实现方法
2018/06/19 Javascript
vue中img src 动态加载本地json的图片路径写法
2019/04/25 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
2019/07/22 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
2019/09/02 Javascript
原生js实现购物车功能
2020/09/23 Javascript
JS实现炫酷轮播图
2020/11/15 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
Python 备份程序代码实现
2017/03/06 Python
Flask-SocketIO服务端安装及使用代码示例
2020/11/26 Python
python os.listdir()乱码解决方案
2021/01/31 Python
Python 调用C++封装的进一步探索交流
2021/03/04 Python
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
荷兰鞋类购物网站:Donelli
2019/05/24 全球购物
毕业研究生的自我鉴定
2013/11/30 职场文书
电气工程师岗位职责
2014/01/01 职场文书
班主任评语大全
2014/04/26 职场文书
2014教师专业技术工作总结
2014/12/03 职场文书
大学教师个人总结
2015/02/10 职场文书
全国法制宣传日活动总结
2015/05/05 职场文书
迎新生欢迎词2015
2015/07/16 职场文书
运动会宣传稿100字
2015/07/23 职场文书