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实例教程(19) 使用HoTMetal(4)
Dec 23 Javascript
改写一个简单的菜单 弹性大小
Dec 02 Javascript
50个比较实用jQuery代码段
Sep 18 Javascript
JavaScript 反科里化 this [译]
Sep 20 Javascript
Angular之toDoList的实现代码示例
Dec 02 Javascript
vue 录制视频并压缩视频文件的方法
Jul 27 Javascript
JavaScript引用类型Date常见用法实例分析
Aug 08 Javascript
详解在vue-test-utils中mock全局对象
Nov 07 Javascript
jquery传参及获取方式(两种方式)
Feb 13 jQuery
Vue+ElementUI 中级联选择器Bug问题的解决
Jul 31 Javascript
微信小程序实现录音Record功能
May 09 Javascript
详解 TypeScript 枚举类型
Nov 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
为查询结果建立向后/向前按钮
2006/10/09 PHP
PHP中__FILE__、dirname与basename用法实例分析
2014/12/01 PHP
php中的登陆login实例代码
2016/06/20 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
2019/10/17 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
iis6+javascript Add an Extension File
2007/06/13 Javascript
jquery tools系列 expose 学习
2009/09/06 Javascript
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
js实现一个省市区三级联动选择框代码分享
2013/03/06 Javascript
常用js字符串判断方法整理
2013/10/18 Javascript
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
JavaScript实现在标题栏上显示当前日期的方法
2015/03/19 Javascript
使用JS实现图片展示瀑布流效果的实例代码
2016/09/12 Javascript
bootstrap基础知识学习笔记
2016/11/02 Javascript
jquery实现简单的瀑布流布局
2016/12/11 Javascript
利用vue实现模态框组件
2016/12/19 Javascript
解决循环中setTimeout执行顺序的问题
2018/06/20 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
浅谈webpack devtool里的7种SourceMap模式
2019/01/14 Javascript
Vue自定义全局弹窗组件操作
2020/08/11 Javascript
详解nginx配置vue h5 history去除#号
2020/11/09 Javascript
python实现简单的TCP代理服务器
2014/10/08 Python
Python验证企业工商注册码
2015/10/25 Python
基于Python中单例模式的几种实现方式及优化详解
2018/01/09 Python
python中set()函数简介及实例解析
2018/01/09 Python
Python实现将json文件中向量写入Excel的方法
2018/03/26 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
python向企业微信发送文字和图片消息的示例
2020/09/28 Python
深入探究HTML5的History API
2015/07/09 HTML / CSS
简单而又朴实的个人求职信分享
2013/12/12 职场文书
家长学校实施方案
2014/03/15 职场文书
干部选拔任用方案
2014/05/26 职场文书
幼儿园中班教师个人工作总结
2015/02/06 职场文书
三八妇女节新闻稿
2015/07/17 职场文书
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang
JavaScript数组 几个常用方法总结
2021/11/11 Javascript