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 相关文章推荐
文本链接逐个出现的js脚本
Dec 12 Javascript
JavaScript入门教程(2) JS基础知识
Jan 31 Javascript
基于JQuery的日期联动实现代码
Feb 24 Javascript
jQuery 1.5.1 发布,全面支持IE9 修复大量bug
Feb 26 Javascript
jQuery 1.5 源码解读 面向中高阶JSER
Apr 05 Javascript
基于JavaScript实现图片点击弹出窗口而不是保存
Feb 06 Javascript
javascript基础知识分享之类与函数化
Feb 13 Javascript
webpack external模块的具体使用
Mar 10 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
Apr 12 Javascript
浅谈webpack-dev-server的配置和使用
May 17 Javascript
在layui下对元素进行事件绑定的实例
Sep 06 Javascript
Vue父子组件传值的一些坑
Sep 16 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
用PHP创建PDF中文文档
2006/10/09 PHP
PHP里的中文变量说明
2011/07/23 PHP
php调用dll的实例操作动画与代码分享
2012/08/14 PHP
php 在线导入mysql大数据程序
2015/06/11 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
JavaScript 保存数组到Cookie的代码
2010/04/14 Javascript
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
js替换字符串的所有示例代码
2013/07/23 Javascript
JQuery中上下文选择器实现方法
2015/05/18 Javascript
解决jquery中动态新增的元素节点无法触发事件问题的两种方法
2015/10/30 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
基于jQuery实现左侧菜单栏可折叠功能
2016/12/27 Javascript
jQuery插件FusionCharts实现的Marimekko图效果示例【附demo源码】
2017/03/24 jQuery
vue自定义filters过滤器
2018/04/26 Javascript
基于mpvue的小程序项目搭建的步骤
2018/05/22 Javascript
javascript面向对象三大特征之继承实例详解
2019/07/24 Javascript
python通过百度地图API获取某地址的经纬度详解
2018/01/28 Python
tensorflow使用神经网络实现mnist分类
2018/09/08 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
2020/02/17 Python
详解django中Template语言
2020/02/22 Python
matplotlib部件之套索Lasso的使用
2021/02/24 Python
法国综合购物网站:RueDuCommerce
2016/09/12 全球购物
英国最大的汽车配件在线商店:Euro Car Parts
2019/09/30 全球购物
公关关系专员的自我评价分享
2013/11/20 职场文书
机关出纳岗位职责
2014/04/03 职场文书
孕妇离婚协议书范本
2014/11/20 职场文书
公司承诺书格式范文
2015/04/28 职场文书
同意报考公务员证明
2015/06/17 职场文书
廉政党课工作报告案例
2019/06/21 职场文书
新学期新寄语,献给新生们!
2019/11/15 职场文书
Python基础教程,Python入门教程(超详细)
2021/06/24 Python
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫
DSP接收机前端设想
2022/04/05 无线电
Spring Boot接口定义和全局异常统一处理
2022/04/20 Java/Android
Python绘制散点图之可视化神器pyecharts
2022/07/07 Python