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 相关文章推荐
Stop SQL Server
Jun 21 Javascript
javascript 模式设计之工厂模式详细说明
May 10 Javascript
国外大牛IE版本检测!现在IE都到9了,IE检测代码
Jan 04 Javascript
Jquery实现弹出层分享微博插件具备动画效果
Apr 03 Javascript
非常酷炫的Bootstrap图片轮播动画
May 27 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
Jan 03 Javascript
bootstrap插件treeview实现全选父节点下所有子节点和反选功能
Jul 21 Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
Mar 18 Javascript
Vue中在新窗口打开页面及Vue-router的使用
Jun 13 Javascript
关于自定义Egg.js的请求级别日志详解
Dec 12 Javascript
JSON.stringify()方法讲解
Jan 31 Javascript
微信小程序实现列表左右滑动
Nov 19 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
jQuery 第二课 操作包装集元素代码
2010/03/14 Javascript
在JS中最常看到切最容易迷惑的语法(转)
2010/10/29 Javascript
js获取RadioButtonList的Value/Text及选中值等信息实现代码
2013/03/05 Javascript
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
javascript实现滑动解锁功能
2014/12/31 Javascript
详解vue.js全局组件和局部组件
2017/04/10 Javascript
JavaScript禁止微信浏览器下拉回弹效果
2017/05/16 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
ES6扩展运算符用法实例分析
2017/10/31 Javascript
Vue中使用canvas方法总结
2019/02/12 Javascript
javascript的delete运算符知识点总结
2019/11/19 Javascript
ant-design-vue 实现表格内部字段验证功能
2019/12/16 Javascript
浅谈javascript如何获取文件后缀名
2020/08/07 Javascript
antd日期选择器禁止选择当天之前的时间操作
2020/10/29 Javascript
Python获取文件ssdeep值的方法
2014/10/05 Python
Python实现将绝对URL替换成相对URL的方法
2015/06/28 Python
深入理解Python变量与常量
2016/06/02 Python
numpy.random.seed()的使用实例解析
2018/02/03 Python
Python退火算法在高次方程的应用
2018/07/26 Python
Python3.5迭代器与生成器用法实例分析
2019/04/30 Python
pandas数据筛选和csv操作的实现方法
2019/07/02 Python
Django和Flask框架优缺点对比
2019/10/24 Python
python 类之间的参数传递方式
2019/12/20 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
python遍历路径破解表单的示例
2020/11/21 Python
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
HTML5使用Audio标签实现歌词同步的效果
2016/03/17 HTML / CSS
html5触摸事件判断滑动方向的实现
2018/06/05 HTML / CSS
CheapTickets香港机票预订网站:CheapTickets.hk
2019/06/26 全球购物
威盛公司软件C++工程师笔试题面试题
2012/07/16 面试题
简述网络文件系统NFS,并说明其作用
2016/10/19 面试题
高二政治教学反思
2014/02/01 职场文书
协议书模板
2014/04/23 职场文书
2014年调度员工作总结
2014/11/19 职场文书
公安干警正风肃纪心得体会
2016/01/15 职场文书