itclancoder

V1

2022/09/15阅读:20主题:绿意

Js中如何不借助第三个中间变量实现交换两个变量的值

前言

这是一道经常前端出去面试的时候,会被问到的题目,虽然很简单,但是如果没有准备的话,回答不上来,依旧还是很尴尬的

方法1-使用一个临时变量

这种方法是使用一个第三方临时变量,进行数据交换过程中的缓存,这样做是比较直观,但是会增加内存的使用

var a = 1,
    b = 2,
    tmp;
tmp = a;
a = b;
b = tmp;

方法2-使用Es6中的解构

在Es6当中提供一个非常暴力的解决办法,一次性解决,简单暴力 解构语法还使用其他类型的变量进行互换

let a = 1,
    b = 2;
 [a,b] = [b,a];

方法3-利用数组的特性进行交换

var a = 1,
    b = 2;
a = [a,b]
b = a[0];
a = a[1]; 

通过数组下标,取值的方式,完成两数的交换

方法4-使用算数运算

通过算术运算过程中的技巧,完成两个值的交换,但这个有缺点,就是会存在数据溢出

var a = 1,
    b = 2;
a = a+b;   // a = 3
b = a-b;   // b = 1;
a = a-b;   // a = 2;

方法5-异或运算

巧用位运算符的技巧,利用a^b^b == a的特点,进行数值交换,避免了使用算术运算带来的弊端,不会发生溢出问题

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

可以使用new Number(具体的数字).toString(需要转化进制数)``,例如:new Number(10).toString(2)``,将10转化为2进制是1010

建议在实际开发中不要使用这种方式,代码变得非常难以理解,维护性差,可阅读性低

分类:

前端

标签:

前端

作者介绍

itclancoder
V1

微公号:itclanCoder