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 相关文章推荐
JavaScript获取GridView中用户点击控件的行号,列号
Apr 14 Javascript
JavaScript中的View-Model使用介绍
Aug 11 Javascript
事件委托与阻止冒泡阻止其父元素事件触发
Sep 02 Javascript
基于JavaScript短信验证码如何实现
Jan 24 Javascript
Bootstrap 附加导航(Affix)插件实例详解
Jun 01 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
Jun 08 Javascript
Bootstrap CSS布局之表格
Dec 17 Javascript
基于BootStrap与jQuery.validate实现表单提交校验功能
Dec 22 Javascript
原生js实现选项卡功能
Mar 08 Javascript
微信小程序 密码输入(源码下载)
Jun 27 Javascript
JavaScript实现简单随机点名器
Nov 21 Javascript
jQuery实现计算器功能
Oct 19 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
77A一级收信机修理记
2021/03/02 无线电
福利彩票幸运号码自动生成器
2006/10/09 PHP
Laravel框架学习笔记(一)环境搭建
2014/10/15 PHP
PHP函数func_num_args用法实例分析
2015/12/07 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
php fseek函数读取大文件两种方法
2016/10/12 PHP
CheckBox 如何实现全选?
2006/06/23 Javascript
在JavaScript中遭遇级联表达式陷阱
2007/03/08 Javascript
jQuery 第二课 操作包装集元素代码
2010/03/14 Javascript
Javascript中的for in循环和hasOwnProperty结合使用
2013/06/05 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
极易被忽视的javascript面试题七问七答
2016/02/15 Javascript
用js写的一个路由(简单实例)
2016/09/24 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
js转换对象为xml
2017/02/17 Javascript
微信小程序开发图片拖拽实例详解
2017/05/05 Javascript
基于Vue生产环境部署详解
2017/09/15 Javascript
vue-cli的eslint相关用法
2017/09/29 Javascript
基于Vue组件化的日期联动选择器功能的实现代码
2018/11/30 Javascript
微信小程序实现手势滑动效果
2019/08/26 Javascript
JavaScript制作3D旋转相册
2020/08/02 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
2020/07/17 Javascript
python使用正则表达式匹配字符串开头并打印示例
2017/01/11 Python
Python如何实现转换URL详解
2019/07/02 Python
Python验证码截取识别代码实例
2020/05/16 Python
Pycharm Plugins加载失败问题解决方案
2020/11/28 Python
Bose加拿大官方网站:美国知名音响品牌
2019/03/21 全球购物
《飞向蓝天的恐龙》教学反思
2014/04/09 职场文书
群众路线教育实践活动总结
2014/10/30 职场文书
2016年春季运动会通讯稿
2015/11/25 职场文书
初中英语教学反思范文
2016/02/15 职场文书
MySQL 表空间碎片的概念及相关问题解决
2021/05/07 MySQL
Python办公自动化之Excel(中)
2021/05/24 Python
剧场版《转生恶役只好拔除破灭旗标》公开最新视觉图 2023年上映
2022/04/02 日漫
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL