JavaScript两个变量交换值(不使用临时变量)
概要
本文主要描述,如何不使用中间值,将两个变量的值进行交换。 前三种只适用于number类型的数值交换,第四和第五种适合其他类型。
一、普通做法
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, // 二进制:0001b = 2; // 二进制:0010a = 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地进行互换。
五、利用数组特性进行交换
var a = 1,b = 2;a = [a, b];
b = a[0];
a = a[1];
复制代码
喜欢我文章的朋友,扫描以下二维码,浏览我的个人技术博客
或点击链接王先生的基地
JavaScript两个变量交换值(不使用临时变量)相关推荐
- 两个数字交换(不使用临时变量)
#include<stdio.h> #include<stdlib.h>void swap(int* a, int* b)//普通交换 {int tmp = *a;*a = * ...
- 不用临时变量交换两个变量的值
在学习C语言的时候,涉及到两个变量值的交换,其中用到临时变量. 类似于: temp=a;a=b;b=temp; 这样的语句,如果在没有临时变量的情况下,该如何做呢? 网络上的人们给出了两种方法: 一. ...
- 关于c++中的临时变量
为什么写这样一篇文章? 本人是c++的初学者, 刚接触类这个概念没多久, 但是遇到了许多问题困扰我, 其中有一个问题尤为致命, 我问了许多前辈, 他们许多都没能如愿帮我彻底解决这个问题, 而写这篇文章 ...
- C++ 临时变量的常量性
文章目录 1.认识临时变量的常量性 2.临时变量常量性的原因 参考文献 1.认识临时变量的常量性 关于临时变量的常量性,先看一段代码. void print(string& str) {cou ...
- .NET异步和多线程系列(四)- 多线程异常处理、线程取消、多线程的临时变量问题、线程安全和锁lock
本文是.NET异步和多线程系列第四章,主要介绍的是多线程异常处理.线程取消.多线程的临时变量问题.线程安全和锁lock等. 一.多线程异常处理 多线程里面抛出的异常,会终结当前线程,但是不会影响别的线 ...
- 动态临时变量为 Azure DevOps Pipeline 变量自定义锦上添花
大家好,我是本期的微软MVP实验室研究员贠乾.Azure Pipeline 本身已经提供了内置变量.不同于上述方式,今天我将带来如何在 Azure DevOps Pipeline 运行时创建.使用动态 ...
- Java中如何不用中间变量来使两个变量交换值
当我们在让两个变量的值进行交换时常常要用到第三个临时变量 例如下面我们想让变量a和b的值进行互换,我们的代码如下: int a = 5; int b = 6; int c; // 进行交换值操作 c ...
- C++实现1.交换两个整形变量的内容.2.不创建临时变量的条件下,交换两个数的内容.3.求是个整数中的最大值.4.将三个数按从大到小输出.5.求两个数的最大公约数.
/ //给定两个整型变量的值,并交换他们的值 int main(){ int a = 10; int b = 20; int temp = a; //创建一个临时变量,来做交换值的中间媒介 a = b ...
- 【C语言刷题】交换两个变量(包含不创建临时变量)的解法
目录 一.常规方法(引入空瓶变量) 二.题目要求,不允许创建临时变量 2.1 通过两数加法实现交换 2.2 按位异或操作符实现交换 题目:写代码实现两个变量的交换.(不允许创建临时变量) 一.常规方法 ...
最新文章
- 争取做一个良性循环的程序员
- mysql中有主键和外键吗_谈谈mysql的主键和外键
- sqlite3常用技巧
- 常用sql001_partition by 以及 row_number()和 dense_rank()和rank()区别
- Asp.net MVC 移除视图引擎(WebFormViewEngine或者RazorViewEngine)
- 视频教程-纯风老师AI平面设计视频教程-其他
- 学校实训 电力巡检系统管理平台
- Quartz 在线Cron表达式
- Windows消息大全(转载)
- MPLS TE Forwarding-adjacency
- 安装doctrine
- python按某列拆分excel表格_Python实现将excel表格按某列拆分为多个sheet(模板格式不变)...
- php ar技术,vr和ar是什么技术,有什么区别
- python时钟编程教程_编程入门16:Python时间操作
- 国内云服务地域选择和测速
- 简单的Dos命令/一行代码实现恶意程序
- 微信小程序 监听手势滑动切换页面
- 【Linux】-- 操作系统进程的状态
- oracle 11g用户名密码区分大小写
- Unity 第一人称、第三人称、漫游视角 控制器.
热门文章
- windows失败计算机关闭,win10电脑关机失败怎么办|win10系统正确关机的详细方法
- 浅谈JavaScript中按键事件的e.keyCode || e.which || e.charCode
- 使用中文输入法时对键盘事件的处理
- android system 分区大小,Android System分区大小异常
- android广播intent原理,Android中BroadcastReceiver详解
- mysql写放大,canvas实现图片根据滑块放大缩小效果
- 智能车竞赛线上培训:基于英飞凌AURIX的BLDC控制方案
- 如何在TEASOFT中加入直线与曲线?
- 芝大教授: 博士培养正沦为“庞氏骗局”
- 复合数值积分方法以及Python程序实现