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 对象定义方法 简单易学
Mar 22 Javascript
js操作table示例(个人心得)
Nov 29 Javascript
深入讲解AngularJS中的自定义指令的使用
Jun 18 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
Nov 24 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
Jun 13 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
Mar 04 Javascript
ES6学习笔记之Set和Map数据结构详解
Apr 07 Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
Sep 04 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
Jul 03 Javascript
对angular 监控数据模型变化的事件方法$watch详解
Oct 09 Javascript
JavaScript如何操作css
Oct 24 Javascript
ant design vue 表格table 默认勾选几项的操作
Oct 31 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
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
2017/03/13 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
jquery jqPlot API 中文使用教程(非常强大的图表工具)
2011/08/15 Javascript
利用javascript判断文件是否存在
2013/12/31 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
js+css实现有立体感的按钮式文字竖排菜单效果
2015/09/01 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
JS从数组中随机取出几个数组元素的方法
2016/08/02 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
2016/11/26 Javascript
jQuery纵向导航菜单效果实现方法
2016/12/19 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
2017/04/10 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
2018/10/24 Javascript
Vue中多个元素、组件的过渡及列表过渡的方法示例
2019/02/13 Javascript
vue的$http的get请求要加上params操作
2020/11/12 Javascript
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
浅析Python编写函数装饰器
2016/03/18 Python
Python实现ssh批量登录并执行命令
2016/10/25 Python
python面试题小结附答案实例代码
2019/04/11 Python
Python读取xlsx文件的实现方法
2019/07/04 Python
pandas的排序和排名的具体使用
2019/07/31 Python
python协程gevent案例 爬取斗鱼图片过程解析
2019/08/27 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
初中生三年学习生活的自我评价
2013/11/03 职场文书
《威尼斯的小艇》教学反思
2014/02/17 职场文书
个人务虚会发言材料
2014/10/20 职场文书
出国留学导师推荐信
2015/03/26 职场文书
2015迎新晚会开场白
2015/07/17 职场文书
2016大学生入党积极分子心得体会
2016/01/06 职场文书
电力安全教育培训心得体会
2016/01/11 职场文书
纯CSS实现酷炫的霓虹灯效果
2021/04/13 HTML / CSS
JAVA API 实用类 String详解
2021/10/05 Java/Android