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 相关文章推荐
关于flash遮盖div浮动层的解决方法
Jul 17 Javascript
JavaScript事件委托的技术原理探讨示例
Apr 17 Javascript
Javascript动态创建div的方法
Feb 09 Javascript
jquery控制表单输入框显示默认值的方法
May 22 Javascript
深入理解JS中的substr和substring
Apr 26 Javascript
javascript设计模式之中介者模式学习笔记
Feb 15 Javascript
p5.js 毕达哥拉斯树的实现代码
Mar 23 Javascript
JavaScript基于对象方法实现数组去重及排序操作示例
Jul 10 Javascript
JavaScript引用类型Object常见用法实例分析
Aug 08 Javascript
微信小程序实现点击效果
Jun 21 Javascript
layui动态绑定事件的方法
Sep 20 Javascript
Angular value与ngValue区别详解
Nov 27 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
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
php给图片加文字水印
2015/07/31 PHP
PHP 根据key 给二维数组分组
2016/12/09 PHP
ExtJS 下拉多选框lovcombo
2010/05/19 Javascript
js数字转换为float,取N位小数
2014/02/08 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
2015/01/05 Javascript
JavaScript学习笔记之JS对象
2015/01/22 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
使用jquery+CSS3实现仿windows10开始菜单的下拉导航菜单特效
2015/09/24 Javascript
JavaScript中判断数据类型的方法总结
2016/05/24 Javascript
jQuery layui常用方法介绍
2016/07/25 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
D3.js进阶系列之CSV表格文件的读取详解
2017/06/06 Javascript
浅析JavaScript中的特殊数据类型
2017/12/15 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
解决百度Echarts图表坐标轴越界的方法
2018/10/17 Javascript
Vue实现可移动水平时间轴
2020/06/29 Javascript
vue项目里面引用svg文件并给svg里面的元素赋值
2020/08/17 Javascript
js将日期格式转换为YYYY-MM-DD HH:MM:SS
2020/09/18 Javascript
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
实例讲解Python编程中@property装饰器的用法
2016/06/20 Python
python实现排序算法解析
2018/09/08 Python
详解Python with/as使用说明
2018/12/13 Python
对Python3.x版本print函数左右对齐详解
2018/12/22 Python
python logging日志模块原理及操作解析
2019/10/12 Python
Python定时从Mysql提取数据存入Redis的实现
2020/05/03 Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
2020/05/17 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
2020/05/20 Python
解决python3.x安装numpy成功但import出错的问题
2020/11/17 Python
物业管理公司实习生自我鉴定
2013/09/19 职场文书
求职自荐信范文格式
2013/11/29 职场文书
教学器材管理制度
2014/01/26 职场文书
班主任2015新年寄语
2014/12/08 职场文书
市场营销计划书
2015/01/17 职场文书
Python FuzzyWuzzy实现模糊匹配
2022/04/28 Python