JavaScript两个变量交换值的实现方法


Posted in Javascript onMarch 01, 2017

概要

本文主要描述,如何不使用中间值,将两个变量的值进行交换。

一、普通做法

var a = 1,
 b = 2,
 tmp;
tmp = a;
a = b;
b = tmp;

普通的做法就是声明多一个临时变量tmp,进行数据交换过程中的缓存。这样的做法直观,易懂。但是,会增加内存的使用。

二、算术运算

var a = 1,
 b = 2;
a = a + b; // a = 3, b = 2
b = a - b; // a = 3, b = 1
a = a - b; // a = 2, b = 1

通过算术运算过程中的技巧,可以巧妙地将两个值进行互换。但是,有个缺点就是变量数据溢出。因为JavaScript能存储数字的精度范围是 -253 到 253。所以,加法运算,会存在溢出的问题。

三、异或运算

var a = 1, // 二进制:0001
 b = 2; // 二进制:0010
a = a ^ b; // 计算结果:a = 0011, b = 0010
b = a ^ b; // 计算结果:a = 0011, b = 0001
a = a ^ b; // 计算结果:a = 0010, b = 0001

本题巧用位运算的技巧,利用 a ^ b ^ b == a 的特点,进行数值交换,避免了使用算术运算带来的弊端,不会发生溢出问题。

四、ES6的解构

let a = 1,
 b = 2;
[a, b] = [b, a];

用解构的语法特性,一次性解决,简单暴力,哈哈哈~

更重要的一点:解构语法还适用于其他类型的变量进行互换。所以,用解构可以很easy地进行互换。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
兼容ie和firefox js关闭代码
Dec 11 Javascript
Javascript异步编程的4种方法让你写出更出色的程序
Jan 17 Javascript
js星星评分效果
Jul 24 Javascript
js+HTML5实现视频截图的方法
Jun 16 Javascript
js带前后翻页的图片切换效果代码分享
Sep 08 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
May 25 Javascript
AngularJS 工作原理详解
Aug 18 Javascript
vue-resourse将json数据输出实例
Mar 08 Javascript
node下使用UglifyJS压缩合并JS文件的方法
Mar 07 Javascript
jQuery实现form表单序列化转换为json对象功能示例
May 23 jQuery
微信小程序HTTP请求从0到1封装
Sep 09 Javascript
JavaScript实现PC端横向轮播图
Feb 07 Javascript
js实现仿购物车加减效果
Mar 01 #Javascript
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
Mar 01 #Javascript
js实现拖拽功能
Mar 01 #Javascript
js实现下拉菜单效果
Mar 01 #Javascript
JS实现复制功能
Mar 01 #Javascript
node.js利用redis数据库缓存数据的方法
Mar 01 #Javascript
JS三目运算(三元运算)方法详解
Mar 01 #Javascript
You might like
珊瑚虫IP库浅析
2007/02/15 PHP
snoopy PHP版的网络客户端提供本地下载
2008/04/15 PHP
PHP中设置时区方法小结
2012/06/03 PHP
解析php常用image图像函数集
2013/06/24 PHP
详解PHP处理密码的几种方式
2016/11/30 PHP
PHP解析url并得到url参数方法总结
2018/10/11 PHP
jQuery选择器简明总结(含用法实例,一目了然)
2014/04/25 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
2014/08/07 Javascript
bootstrap模态框垂直居中效果
2016/12/03 Javascript
canvas绘制表盘时钟
2017/01/23 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
Angular实现点击按钮控制隐藏和显示功能示例
2017/12/29 Javascript
详解Webpack + ES6 最新环境搭建与配置
2018/06/04 Javascript
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
layui table复选框禁止某几条勾选的实例
2019/09/20 Javascript
vue  elementUI 表单嵌套验证的实例代码
2019/11/06 Javascript
JavaScript中作用域链的概念及用途讲解
2020/08/06 Javascript
查找Vue中下标的操作(some和findindex)
2020/08/12 Javascript
解决VueCil代理本地proxytable无效报错404的问题
2020/11/07 Javascript
[05:17]DOTA2睡衣妹卖萌求签名 CJ第二天全明星影像
2013/07/28 DOTA
Python入门篇之字符串
2014/10/17 Python
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
Python 如何访问外围作用域中的变量
2016/09/11 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
python读取word文档,插入mysql数据库的示例代码
2018/11/07 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
python基于TCP实现的文件下载器功能案例
2019/12/10 Python
python使用html2text库实现从HTML转markdown的方法详解
2020/02/21 Python
Python 在函数上添加包装器
2020/07/28 Python
HTML5 常用语法一览(列举不支持的属性)
2010/01/26 HTML / CSS
会计电算化专业毕业生自荐信
2013/12/20 职场文书
入党自我鉴定
2014/03/25 职场文书
承兑汇票延期证明
2015/06/23 职场文书
Java spring定时任务详解
2021/10/05 Java/Android
Java tomcat手动配置servlet详解
2021/11/27 Java/Android
Oracle配置dblink访问PostgreSQL的操作方法
2022/03/21 PostgreSQL