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 控制CSS样式表
Aug 20 Javascript
ajax提交表单实现网页无刷新注册示例
May 08 Javascript
js、jquery图片动画、动态切换示例代码
Jun 03 Javascript
jQuery插入节点和移动节点用法示例(insertAfter、insertBefore方法)
Sep 08 Javascript
原生javascript移动端滑动banner效果
Mar 10 Javascript
AngularJS之自定义服务详解(factory、service、provider)
Apr 14 Javascript
JavaScript基于replace+正则实现ES6的字符串模版功能
Apr 25 Javascript
简单实现js放大镜效果
Jul 24 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
Nov 11 Javascript
js将当前时间格式化为 年-月-日 时:分:秒的实现代码
Jan 20 Javascript
ng-events类似ionic中Events的angular全局事件
Sep 05 Javascript
基于ajax及jQuery实现局部刷新过程解析
Sep 12 jQuery
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
杏林同学录(二)
2006/10/09 PHP
php curl获取网页内容(IPV6下超时)的解决办法
2013/07/16 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
2016/10/26 PHP
php 静态属性和静态方法区别详解
2017/04/09 PHP
Laravel中的Auth模块详解
2017/08/17 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
Javascript 面向对象编程(一) 封装
2011/08/28 Javascript
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
js判断浏览器是否支持html5
2014/08/17 Javascript
jQuery实现的右下角广告窗体跟随效果示例
2016/09/16 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
2017/03/20 Javascript
Vue+Element使用富文本编辑器的示例代码
2017/08/14 Javascript
解决Mac node版本升级失败的问题
2018/05/16 Javascript
jQuery实现增删改查
2020/12/22 jQuery
[03:41]DOTA2上海特锦赛小组赛第三日recap精彩回顾
2016/02/28 DOTA
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
让python json encode datetime类型
2010/12/28 Python
Tornado Web服务器多进程启动的2个方法
2014/08/04 Python
python字符串,数值计算
2016/10/05 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
python 中的列表生成式、生成器表达式、模块导入
2019/06/19 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
2019/09/07 Python
python plotly画柱状图代码实例
2019/12/13 Python
python关于调用函数外的变量实例
2019/12/26 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
python中rc1什么意思
2020/06/19 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
孕妇内衣和胸罩:Cake Maternity
2018/07/16 全球购物
Sport-Thieme荷兰:购买体育用品
2019/08/25 全球购物
活动策划邀请函
2014/02/06 职场文书
岗位标兵事迹材料
2014/05/17 职场文书
服装设计专业求职信
2014/06/16 职场文书