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 09 Javascript
jQuery的实现原理的模拟代码 -2 数据部分
Aug 01 Javascript
ExtJS4 Grid改变单元格背景颜色及Column render学习
Feb 06 Javascript
jquery对table中各数据的增加、保存、删除操作示例
May 14 Javascript
一个仿糯米弹框效果demo
Jul 22 Javascript
JavaScript AJAX之惰性载入函数
Aug 27 Javascript
深入理解$.each和$(selector).each
May 15 Javascript
jQuery实现右下角可缩放大小的层完整实例
Jun 20 Javascript
jsp 自动编译机制详细介绍
Dec 01 Javascript
vue.js异步上传文件前后端实现代码
Aug 22 Javascript
Vue学习笔记之表单输入控件绑定
Sep 05 Javascript
vue中,在本地缓存中读写数据的方法
Sep 21 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
判“新”函数:得到今天与明天的秒数
2006/10/09 PHP
神盾加密解密教程(三)PHP 神盾解密工具
2014/06/08 PHP
php实现xml与json之间的相互转换功能实例
2016/07/07 PHP
Yii2使用dropdownlist实现地区三级联动功能的方法
2016/07/18 PHP
php验证码生成器
2017/05/24 PHP
jQuery 解析xml文件
2009/08/09 Javascript
prototype与jquery下Ajax实现的差别
2009/09/13 Javascript
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
返回顶部按钮响应滚动且动态显示与隐藏
2014/10/14 Javascript
JQuery入门基础小实例(1)
2015/09/17 Javascript
JavaScript File API文件上传预览
2016/02/02 Javascript
浅谈JavaScript对象与继承
2016/07/10 Javascript
AngularJs入门教程之环境搭建+创建应用示例
2016/11/01 Javascript
Vue.js第四天学习笔记(组件)
2016/12/02 Javascript
JS实现的DIV块来回滚动效果示例
2017/02/07 Javascript
Vue.js2.0中的变化小结
2017/10/24 Javascript
详解Chart.js轻量级图表库的使用经验
2018/05/22 Javascript
Python实现截屏的函数
2015/07/25 Python
python3.x上post发送json数据
2018/03/04 Python
详解flask表单提交的两种方式
2018/07/21 Python
Python docx库用法示例分析
2019/02/16 Python
将python文件打包exe独立运行程序方法详解
2020/02/12 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
2020/03/04 Python
在Python IDLE 下调用anaconda中的库教程
2020/03/09 Python
Python logging日志库空间不足问题解决
2020/09/14 Python
基于Python爬取素材网站音频文件
2020/10/21 Python
详解webapp页面滚动卡顿的解决办法
2018/12/26 HTML / CSS
电子邮箱格式怎么写
2014/01/12 职场文书
中等生评语大全
2014/05/04 职场文书
关于运动会广播稿300字
2014/10/05 职场文书
办公楼租房协议书范本
2014/11/25 职场文书
介绍信的写法
2015/01/31 职场文书
医德医风个人总结
2015/02/28 职场文书
廉政承诺书范文
2015/04/28 职场文书
如何写通讯稿
2015/07/22 职场文书
2016拓展训练心得体会范文
2016/01/12 职场文书