JS入门中有一个非常简单的小案例,就是定义两个变量,通过JS实现他们的数据交换,案例虽然小,但是其中的脑洞非常好玩,现在和大家分享一下。

1、定义一个空变量

let num,
    a=123,
    b=456;
    num=a;
    a=b;
    b=num;
console.log(a,b);

最常见的办法,也没什么难度,需要一个空变量,下面的方法都不会再有变量

其实不使⽤临时变量的思路都是让其中⼀个变量变成⼀个a和b都有关系的值,这样可以先改变另⼀个变量值,最后改变原修改的变量值
 

2、利用算数和或算数减

let a=123,
    b=456;
    a+=b;
    b=a-b;
    a-=b;
console.log(a,b);

让a先变成a与b的‘和'(也可以换成a和b的差,⼀样的),‘和'减去b巧妙的得到了a的变量值赋予b ,再通过‘和'减去a的值得到了b的值赋予a,或者是下⾯的变式(差的形式)

let a=123,
    b=456;
    a -= b;
    b = a + b;
    a = b - a;
console.log(a,b);

3、利用位

 let a = 123,
     b = 456;
     a ^= b;
     b ^= a;
     a ^= b;
     console.log(a, b);

//或者这样
a = (b^=a^=b)^a;

通过底层位运算来进⾏交换变量值,不过JS中很少用位
 

4、利用对象

let a=123,
    b=456;
    a = {a:b,b:a};
    b = a.b;
    a = a.a;
    console.log(a,b);

把a先变成了⼀个对象,这个对象保存着应该交换后的键值对,最后赋值
 

5、利用数组

 let a = 123,
     b = 456;
     a = [a, b];
     b = a[0];
     a = a[1];
     console.log(a, b);

和上面很像,只是换成了数组

6、仅供参考的大神写法 

 let a = 123,
     b = 456;
     a = [b,b=a][0];
     console.log(a, b);

 非常简单粗暴神奇的写法,脑洞天才

7、ES6的解构赋值语法

let a = 123,
    b = 456;
    [a,b] = [b,a];
    console.log(a, b);


 

Logo

基于 Vue 的企业级 UI 组件库和中后台系统解决方案,为数万开发者服务。

更多推荐