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 相关文章推荐
国外Lightbox v2.03.3 最新版 下载
Oct 17 Javascript
js 页面输出值
Nov 30 Javascript
原生javascript实现图片轮播效果代码
Sep 03 Javascript
js实现的跟随鼠标移动的时钟效果(中英文日期显示)
Jan 17 Javascript
js中的string.format函数代码
Aug 11 Javascript
判断在css加载完毕后执行后续代码示例
Sep 03 Javascript
AngularJS学习笔记之TodoMVC的分析
Feb 22 Javascript
更高效的使用JQuery 这里总结了8个小技巧
Apr 13 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
Sep 28 Javascript
IE8兼容Jquery.validate.js的问题
Dec 01 Javascript
vue-cli配置文件——config篇
Jan 04 Javascript
在vue中实现禁止屏幕滚动,禁止屏幕滑动
Jul 22 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
为php4加入动态flash文件的生成的支持
2006/10/09 PHP
php获取bing每日壁纸示例分享
2014/02/25 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
thinkPHP框架实现的无限回复评论功能示例
2018/06/09 PHP
php连接mysql数据库最简单的实现方法
2019/09/24 PHP
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
2013/04/18 Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
2015/09/05 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
jquery对象和DOM对象的任意相互转换
2016/02/21 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
angularjs实现首页轮播图效果
2017/04/14 Javascript
详解mpvue开发小程序小总结
2018/07/25 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
2020/08/31 Javascript
常用python数据类型转换函数总结
2014/03/11 Python
python之wxPython应用实例
2014/09/28 Python
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
Python的爬虫程序编写框架Scrapy入门学习教程
2016/07/02 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
2019/06/19 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
django model的update时auto_now不被更新的原因及解决方式
2020/04/01 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
2021/03/03 Python
ZINVO手表官网:男士和女士手表
2019/03/10 全球购物
电子商务应届生求职信
2013/11/16 职场文书
统计学专业毕业生的自我评价分享
2013/11/28 职场文书
大学自我鉴定范文
2013/12/26 职场文书
酒店中秋节活动方案
2014/01/31 职场文书
关于运动会的稿件
2014/02/02 职场文书
战友聚会策划方案
2014/06/13 职场文书
小学班主任经验交流材料
2014/12/16 职场文书
体育活动总结
2015/02/04 职场文书
扬州个园导游词
2015/02/06 职场文书
【海涛教你打dota】体验一超神发条:咱是抢盾专业户
2022/04/01 DOTA
关于windows server 2012 DC 环境 重启后蓝屏代码:0xc00002e2的问题
2022/05/25 Servers