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 自定义函数缺省值的设置方法
May 05 Javascript
JS字符串累加Array不一定比字符串累加快(根据电脑配置)
May 14 Javascript
js动态为代码着色显示行号
May 29 Javascript
jquery实现按Enter键触发事件示例
Sep 10 Javascript
JavaScript转换与解析JSON方法实例详解
Nov 24 Javascript
javascript中去除数组重复元素的实现方法【实例】
Apr 12 Javascript
使用jQuery判断浏览器滚动条位置的方法
May 30 Javascript
node安装--linux下的快速安装教程
Mar 21 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
Apr 20 Javascript
Vue2.X 通过AJAX动态更新数据
Jul 17 Javascript
React通过redux-persist持久化数据存储的方法示例
Feb 14 Javascript
详解express使用vue-router的history踩坑
Jun 05 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扩展模块Pecl、Pear以及Perl的区别
2014/04/09 PHP
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
2015/09/30 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
2016/02/15 PHP
ThinkPHP 模板substr的截取字符串函数详解
2017/01/09 PHP
javascript显示隐藏层比较不错的方法分析
2008/09/30 Javascript
Javascript 学习书 推荐
2009/06/13 Javascript
Prototype 学习 工具函数学习($方法)
2009/07/12 Javascript
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
jquery判断复选框是否选中进行答题提示特效
2015/12/10 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
学习Node.js模块机制
2016/10/17 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
2017/01/04 Javascript
Node.js Express 框架 POST方法详解
2017/01/23 Javascript
微信小程序实现选项卡功能
2020/06/19 Javascript
NodeJS实现视频转码的示例代码
2017/11/18 NodeJs
详解webpack3编译兼容IE8的正确姿势
2017/12/21 Javascript
使用vue-cli编写vue插件的方法
2018/02/26 Javascript
JavaScript对象的特性与实践应用深入详解
2018/12/30 Javascript
JavaScript的垃圾回收机制与内存管理
2020/08/06 Javascript
python中requests库session对象的妙用详解
2017/10/30 Python
获取python的list中含有重复值的index方法
2018/06/27 Python
Python中Subprocess的不同函数解析
2019/12/10 Python
解决keras backend 越跑越慢问题
2020/06/18 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
python 6种方法实现单例模式
2020/12/15 Python
Sunglasses Shop英国:欧洲领先的太阳镜在线供应商之一
2018/09/19 全球购物
Urban Decay官方网站:美国化妆品品牌
2020/06/04 全球购物
千元咖啡店的创业计划书范文
2013/12/29 职场文书
会议室标语
2014/06/21 职场文书
法制宣传标语集锦
2014/06/25 职场文书
公司活动总结范文
2014/07/01 职场文书
销售辞职信范文
2015/03/02 职场文书
年度考核个人总结
2015/03/06 职场文书
初中生物教学反思
2016/02/20 职场文书
python3.7.2 tkinter entry框限定输入数字的操作
2021/05/22 Python
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis