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转换农历类实现及调用方法
Jan 27 Javascript
jquery $.each 和for怎么跳出循环终止本次循环
Sep 27 Javascript
javascript 获取浏览器版本
Jan 21 Javascript
JavaScript 浏览器对象模型BOM使用介绍
Apr 13 Javascript
JavaScript判断按钮被点击的方法
Dec 13 Javascript
浅谈JavaScript中数组的增删改查
Jun 20 Javascript
EasyUI Pagination 分页的两种做法小结
Jul 09 Javascript
Js获取当前日期时间及格式化代码
Sep 17 Javascript
JS查找字符串中出现最多的字符及个数统计
Feb 04 Javascript
详解JavaScript栈内存与堆内存
Apr 04 Javascript
基于JavaScript判断两个对象内容是否相等
Jan 10 Javascript
vue学习笔记之作用域插槽实例分析
Feb 01 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数据采集的详解
2013/06/02 PHP
探讨PHP删除文件夹的三种方法
2013/06/09 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
2016/06/21 PHP
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
2006/09/22 Javascript
ExtJS Window 最小化的一种方法
2009/11/18 Javascript
通过js获取div的background-image属性
2013/10/15 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
Vue 固定头 固定列 点击表头可排序的表格组件
2016/11/25 Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
2017/01/08 Javascript
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
vue的Virtual Dom实现snabbdom解密
2017/05/03 Javascript
vue初尝试--项目结构(推荐)
2018/01/30 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
2018/03/29 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
Vue 页面权限控制和登陆验证功能的实例代码
2019/06/20 Javascript
非常漂亮的js烟花效果
2020/03/10 Javascript
python 用下标截取字符串的实例
2018/12/25 Python
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
Python模拟百度自动输入搜索功能的实例
2019/02/14 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
Django静态文件加载失败解决方案
2020/08/26 Python
如何在pycharm中安装第三方包
2020/10/27 Python
纯CSS3实现图片无间断轮播效果
2016/08/25 HTML / CSS
购买澳大利亚最好的服装和内衣在线:BONDS
2016/10/14 全球购物
百思买加拿大:Best Buy Canada
2018/03/20 全球购物
龟牌英国商店:Turtle Wax Brand Store UK
2019/07/02 全球购物
企业指导教师评语
2014/04/28 职场文书
医疗专业毕业生求职信
2014/08/28 职场文书
暑假生活随笔
2015/08/15 职场文书
2016大学生暑期社会实践心得体会
2016/01/14 职场文书
golang 实现两个结构体复制字段
2021/04/28 Golang
vue-cil之axios的二次封装与proxy反向代理使用说明
2022/04/07 Vue.js
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技
tomcat默认最大连接数及相关调整方法
2022/05/06 Servers