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 相关文章推荐
做网页的一些技巧
Feb 01 Javascript
深入理解JavaScript定时机制
Oct 29 Javascript
jQuery在html有效在jsp无效的原因及解决方法
Aug 02 Javascript
script不刷新页面的联动前后代码
Sep 18 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
Jan 10 Javascript
JavaScript通过字典进行字符串翻译转换的方法
Mar 19 Javascript
JavaScript中Date.toSource()方法的使用教程
Jun 12 Javascript
详解AngularJS ui-sref的简单使用
Apr 24 Javascript
angularjs 的数据绑定实现原理
Jul 02 Javascript
JavaScript中将值转换为字符串的五种方法总结
Jun 06 Javascript
three.js 实现露珠滴落动画效果的示例代码
Mar 01 Javascript
jQuery实现鼠标拖动图片功能
Mar 04 jQuery
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
谈谈PHP语法(2)
2006/10/09 PHP
PHP以及MYSQL日期比较方法
2012/11/29 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
2014/05/04 PHP
PHP关联数组实现根据元素值删除元素的方法
2015/06/26 PHP
PHP微信红包API接口
2015/12/05 PHP
PHP实现链式操作的原理详解
2016/09/16 PHP
为何说PHP引用是个坑,要慎用
2018/04/02 PHP
js简单实现根据身份证号码识别性别年龄生日
2013/11/29 Javascript
jQuery子属性过滤选择器用法分析
2015/02/10 Javascript
js中scrollTop()方法和scroll()方法用法示例
2016/10/03 Javascript
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
vue.js实现简单轮播图效果
2017/10/10 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
vue项目关闭eslint校验
2018/03/21 Javascript
webpack@v4升级踩坑(小结)
2018/10/08 Javascript
javascript+Canvas实现画板功能
2020/06/23 Javascript
[01:06:07]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS CIS
2014/05/22 DOTA
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
python执行等待程序直到第二天零点的方法
2015/04/23 Python
Python基于递归算法实现的走迷宫问题
2017/08/04 Python
Python实现曲线点抽稀算法的示例
2017/10/12 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
在Python中等距取出一个数组其中n个数的实现方式
2019/11/27 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
2020/04/16 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
html5 canvas绘制放射性渐变色效果
2018/01/04 HTML / CSS
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
Theo + George官方网站:都柏林时尚品牌
2019/04/08 全球购物
Nixon手表英国官网:美国尼克松手表品牌
2020/02/10 全球购物
学校运动会广播稿
2014/10/11 职场文书
中学生旷课检讨书500字
2014/10/29 职场文书
2015年求职自荐信范文
2015/03/04 职场文书
2017元旦、春节期间廉洁自律承诺书
2016/03/25 职场文书
2016年119消防宣传日活动总结
2016/04/05 职场文书