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实现判断图片是否加载完成的3种方法整理
Mar 13 Javascript
js控制TR的显示隐藏
Mar 04 Javascript
详解Vue方法与事件
Mar 09 Javascript
JS字符串按逗号和回车分隔的方法
Apr 25 Javascript
详解AngularJs路由之Ui-router-resolve(预加载)
Jun 13 Javascript
微信小程序中button组件的边框设置的实例详解
Sep 27 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
Dec 06 Javascript
解决Vue 浏览器后退无法触发beforeRouteLeave的问题
Dec 24 Javascript
详解vuex结合localstorage动态监听storage的变化
May 03 Javascript
JavaScript实现简单进度条效果
Mar 25 Javascript
vue-cli3配置favicon.ico和title的流程
Oct 27 Javascript
JavaScript中reduce()的用法
May 11 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
修改Zend引擎实现PHP源码加密的原理及实践
2008/04/14 PHP
超级兔子让浮动层消失的前因后果
2007/03/09 Javascript
jquery+php实现搜索框自动提示
2014/11/28 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
关于jQuery.ajax()的jsonp碰上post详解
2017/07/02 jQuery
JS基于贪心算法解决背包问题示例
2017/11/27 Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
2019/08/23 Javascript
原生jQuery实现只显示年份下拉框
2020/12/24 jQuery
基于element-ui封装表单金额输入框的方法示例
2021/01/06 Javascript
Python通过PIL获取图片主要颜色并和颜色库进行对比的方法
2015/03/19 Python
使用Python的判断语句模拟三目运算
2015/04/24 Python
python访问mysql数据库的实现方法(2则示例)
2016/01/06 Python
python装饰器初探(推荐)
2016/07/21 Python
Python脚本实现Web漏洞扫描工具
2016/10/25 Python
对Python中Iterator和Iterable的区别详解
2018/10/18 Python
对python 读取线的shp文件实例详解
2018/12/22 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
Python os模块常用方法和属性总结
2020/02/20 Python
Django 404、500页面全局配置知识点详解
2020/03/10 Python
css3实现的多级渐变下拉菜单导航效果代码
2015/08/31 HTML / CSS
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
捷克电器和DJ设备网上商店:Electronic-star
2017/07/18 全球购物
eBay法国购物网站:eBay.fr
2017/10/21 全球购物
人力资源经理自我评价
2014/01/04 职场文书
四风问题党员个人整改措施
2014/10/27 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书
个人先进事迹材料
2014/12/29 职场文书
学习雷锋精神活动总结
2015/02/06 职场文书
技术支持岗位职责
2015/02/13 职场文书
2015年上半年党建工作总结
2015/03/30 职场文书
催款函范本大全
2015/06/24 职场文书
幼儿园托班开学寄语(2016秋季)
2015/12/03 职场文书
《领导干部从政道德启示录》学习心得体会
2016/01/20 职场文书
《月光曲》教学反思
2016/02/16 职场文书
Java新手教程之ArrayList的基本使用
2021/06/20 Java/Android
Python re.sub 反向引用的实现
2021/07/07 Python