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 图片轮播(5张图片)
Dec 30 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
Nov 21 Javascript
javascript实现无限级select联动菜单
Jan 02 Javascript
javascript搜索框效果实现方法
May 14 Javascript
js窗口震动小程序分享
Nov 28 Javascript
微信小程序开发(一) 微信登录流程详解
Jan 11 Javascript
原生JS京东轮播图代码
Mar 22 Javascript
捕获未处理的Promise错误方法
Oct 13 Javascript
使用JS获取SessionStorage的值
Jan 12 Javascript
Vue精简版风格指南(推荐)
Jan 30 Javascript
js点击事件的执行过程实例分析【冒泡与捕获】
Apr 11 Javascript
关于antd tree 和父子组件之间的传值问题(react 总结)
Jun 02 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下MYSQL limit的优化
2008/01/10 PHP
php获取一个变量的名字的方法
2014/09/05 PHP
THINKPHP内容分页代码分享
2015/01/14 PHP
使用php转义输出HTML到JavaScript
2015/03/27 PHP
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
script不刷新页面的联动前后代码
2013/09/18 Javascript
js图片实时加载提供网页打开速度
2014/09/11 Javascript
jQuery选择器之基本选择器与层次选择器
2015/03/03 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
jquery滚动特效集锦
2015/06/03 Javascript
JS实现可拖曳、可关闭的弹窗效果
2015/09/26 Javascript
JavaScript基础知识及常用方法总结
2016/01/10 Javascript
jQuery版本升级踩坑大全
2016/01/12 Javascript
jQuery插件Validate实现自定义表单验证
2016/01/18 Javascript
angularJS 指令封装回到顶部示例详解
2017/01/22 Javascript
JavaScript获取select中text值的方法
2017/02/13 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
2018/03/05 Javascript
JS获取当前时间的实例代码(昨天、今天、明天)
2018/11/13 Javascript
浅谈React Native 传参的几种方式(小结)
2019/05/21 Javascript
swiper Scrollbar滚动条组件详解
2019/09/08 Javascript
Vue 简单实现前端权限控制的示例
2020/12/25 Vue.js
[48:37]EG vs OG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python socket多线程通讯实例分析(聊天室)
2016/04/06 Python
Python 提取dict转换为xml/json/table并输出的实现代码
2016/08/28 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
Selenium向iframe富文本框输入内容过程图解
2020/04/10 Python
Python新手如何进行闭包时绑定变量操作
2020/05/29 Python
美国领先的水果篮送货公司和新鲜水果供应商:The Fruit Company
2018/02/13 全球购物
创业计划书——互联网商机
2014/01/12 职场文书
擅自离岗检讨书
2014/02/11 职场文书
员工趣味活动方案
2014/08/27 职场文书
2014年个人债务授权委托书范本
2014/09/22 职场文书
放假通知
2015/04/14 职场文书
指导老师鉴定意见
2015/06/05 职场文书
结婚司仪主持词
2015/06/29 职场文书