概要

本文主要描述,如何不使用中间值,将两个变量的值进行交换。  前三种只适用于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两个变量交换值(不使用临时变量)相关推荐

  1. 两个数字交换(不使用临时变量)

    #include<stdio.h> #include<stdlib.h>void swap(int* a, int* b)//普通交换 {int tmp = *a;*a = * ...

  2. 不用临时变量交换两个变量的值

    在学习C语言的时候,涉及到两个变量值的交换,其中用到临时变量. 类似于: temp=a;a=b;b=temp; 这样的语句,如果在没有临时变量的情况下,该如何做呢? 网络上的人们给出了两种方法: 一. ...

  3. 关于c++中的临时变量

    为什么写这样一篇文章? 本人是c++的初学者, 刚接触类这个概念没多久, 但是遇到了许多问题困扰我, 其中有一个问题尤为致命, 我问了许多前辈, 他们许多都没能如愿帮我彻底解决这个问题, 而写这篇文章 ...

  4. C++ 临时变量的常量性

    文章目录 1.认识临时变量的常量性 2.临时变量常量性的原因 参考文献 1.认识临时变量的常量性 关于临时变量的常量性,先看一段代码. void print(string& str) {cou ...

  5. .NET异步和多线程系列(四)- 多线程异常处理、线程取消、多线程的临时变量问题、线程安全和锁lock

    本文是.NET异步和多线程系列第四章,主要介绍的是多线程异常处理.线程取消.多线程的临时变量问题.线程安全和锁lock等. 一.多线程异常处理 多线程里面抛出的异常,会终结当前线程,但是不会影响别的线 ...

  6. 动态临时变量为 Azure DevOps Pipeline 变量自定义锦上添花

    大家好,我是本期的微软MVP实验室研究员贠乾.Azure Pipeline 本身已经提供了内置变量.不同于上述方式,今天我将带来如何在 Azure DevOps Pipeline 运行时创建.使用动态 ...

  7. Java中如何不用中间变量来使两个变量交换值

    当我们在让两个变量的值进行交换时常常要用到第三个临时变量 例如下面我们想让变量a和b的值进行互换,我们的代码如下: int a = 5; int b = 6; int c; // 进行交换值操作 c ...

  8. C++实现1.交换两个整形变量的内容.2.不创建临时变量的条件下,交换两个数的内容.3.求是个整数中的最大值.4.将三个数按从大到小输出.5.求两个数的最大公约数.

    / //给定两个整型变量的值,并交换他们的值 int main(){ int a = 10; int b = 20; int temp = a; //创建一个临时变量,来做交换值的中间媒介 a = b ...

  9. 【C语言刷题】交换两个变量(包含不创建临时变量)的解法

    目录 一.常规方法(引入空瓶变量) 二.题目要求,不允许创建临时变量 2.1 通过两数加法实现交换 2.2 按位异或操作符实现交换 题目:写代码实现两个变量的交换.(不允许创建临时变量) 一.常规方法 ...

最新文章

  1. 争取做一个良性循环的程序员
  2. mysql中有主键和外键吗_谈谈mysql的主键和外键
  3. sqlite3常用技巧
  4. 常用sql001_partition by 以及 row_number()和 dense_rank()和rank()区别
  5. Asp.net MVC 移除视图引擎(WebFormViewEngine或者RazorViewEngine)
  6. 视频教程-纯风老师AI平面设计视频教程-其他
  7. 学校实训 电力巡检系统管理平台
  8. Quartz 在线Cron表达式
  9. Windows消息大全(转载)
  10. MPLS TE Forwarding-adjacency
  11. 安装doctrine
  12. python按某列拆分excel表格_Python实现将excel表格按某列拆分为多个sheet(模板格式不变)...
  13. php ar技术,vr和ar是什么技术,有什么区别
  14. python时钟编程教程_编程入门16:Python时间操作
  15. 国内云服务地域选择和测速
  16. 简单的Dos命令/一行代码实现恶意程序
  17. 微信小程序 监听手势滑动切换页面
  18. 【Linux】-- 操作系统进程的状态
  19. oracle 11g用户名密码区分大小写
  20. Unity 第一人称、第三人称、漫游视角 控制器.

热门文章

  1. windows失败计算机关闭,win10电脑关机失败怎么办|win10系统正确关机的详细方法
  2. 浅谈JavaScript中按键事件的e.keyCode || e.which || e.charCode
  3. 使用中文输入法时对键盘事件的处理
  4. android system 分区大小,Android System分区大小异常
  5. android广播intent原理,Android中BroadcastReceiver详解
  6. mysql写放大,canvas实现图片根据滑块放大缩小效果
  7. 智能车竞赛线上培训:基于英飞凌AURIX的BLDC控制方案
  8. 如何在TEASOFT中加入直线与曲线?
  9. 芝大教授: 博士培养正沦为“庞氏骗局”
  10. 复合数值积分方法以及Python程序实现