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 读书笔记索引贴
Jan 11 Javascript
jquery实现table鼠标经过变色代码
Sep 25 Javascript
直接在JS里创建JSON数据然后遍历使用
Jul 25 Javascript
JQuery实现表格动态增加行并对新行添加事件
Jul 30 Javascript
原生js与jQuery实现简单的tab切换特效对比
Jul 30 Javascript
AngularJS 使用$sce控制代码安全检查
Jan 05 Javascript
javascript编程实现栈的方法详解【经典数据结构】
Apr 11 Javascript
ReactNative中使用Redux架构总结
Dec 15 Javascript
angularJs 表格添加删除修改查询方法
Feb 27 Javascript
小程序清理本地缓存的方法
Aug 17 Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
Jul 24 Javascript
js 计算月/周的第一天和最后一天代码
Feb 01 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
php安全开发 添加随机字符串验证,防止伪造跨站请求
2013/02/14 PHP
php实现的通用图片处理类
2015/03/24 PHP
WordPress中邮件的一些修改和自定义技巧
2015/12/15 PHP
php简单解析mysqli查询结果的方法(2种方法)
2016/06/29 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
2016/10/08 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
JavaScript修改css样式style
2008/04/15 Javascript
Jquery 获得服务器控件值的方法小结
2010/05/11 Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
2010/06/25 Javascript
jquery ajax abort()的使用方法
2010/10/28 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
2014/09/01 Javascript
JavaScript实现Java中Map容器的方法
2016/10/09 Javascript
vue.js实现单选框、复选框和下拉框示例
2017/07/18 Javascript
js学习总结之dom2级事件基础知识详解
2017/07/27 Javascript
微信小程序 input表单与redio及下拉列表的使用实例
2017/09/20 Javascript
vue路由跳转时判断用户是否登录功能的实现
2017/10/26 Javascript
js实现简单数字变动效果
2017/11/06 Javascript
vue移动端实现下拉刷新
2018/04/22 Javascript
使用JavaScript破解web
2018/09/28 Javascript
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
2019/04/13 Javascript
用Python展示动态规则法用以解决重叠子问题的示例
2015/04/02 Python
Python中的多重装饰器
2015/04/11 Python
Python实现二分查找算法实例
2015/05/26 Python
python装饰器初探(推荐)
2016/07/21 Python
python分割列表(list)的方法示例
2017/05/07 Python
pandas.DataFrame 根据条件新建列并赋值的方法
2018/04/08 Python
详解python实现识别手写MNIST数字集的程序
2018/08/03 Python
python opencv 批量改变图片的尺寸大小的方法
2019/06/28 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
python 实现Flask中返回图片流给前端展示
2020/01/09 Python
Python 虚拟环境工作原理解析
2020/12/24 Python
共青团员自我评价范文
2014/09/14 职场文书
教师个人发展总结
2015/02/11 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
如何使用Tkinter进行窗口的管理与设置
2021/06/30 Python