zoukankan      html  css  js  c++  java
  • 交换变量的值

    题目:var a=1,b=2;交换a和b的值?

    1)利用第三方临时变量存值

    var a=1,b=2;
    var temp=0;
    temp=a;
    a=b;
    b=temp;
    console.log("a : "+a+",b : "+b)
    

    2)算术运算的方法

    var a=1,b=2;
    a=b-a;
    b=b-a;
    a=b+a;
    console.log("a : "+a+",b : "+b)
    

    或者

    var a=1,b=2;
    a=a+b;
    b=a-b;
    a=a-b;
    console.log("a : "+a+",b : "+b)
    

    这两种算法其实是一样的,用数轴的概念就比较好理解,a和b分别为数轴上的两个点,a=b-a;就是这两个点的距离,a现在代表的就是距离,此时b的值没有变化,b-a就是相当于b减掉a和b的距离,就是a的初始值1,把它赋值给b,此时完成了b的值是a的初始值1,a现在代表的还是距离,b+a的意思就是b现在的值加上这段距离,就是b的初始值,把它赋值给a,此时完成了a的值是b的初始值2;这中方法是利用了中间的差作为中间变量,第二种是利用的和作为中间变量,道理都是一样的,不明白的微信我吧(17346598520)

    3)利用按位异或运算符 (^)

    var a = 1,b = 2;
    a ^= b;
    b ^= a;
    a ^= b;
    console.log("a : " + a + ",b : " + b);
    

    这个异或运算符,在js中不常用,它的定义是当且仅当只有一个表达式的某位为 1 时,结果中的该位才为 1。否则,结果中的该位为0。在这里,a的二进制就是01,b的二进制就是10,所以01异或10的结果是11,此时a是11,b还是10,b异或a,结果是01,把值赋给了b完成了交换,此时a是11,b是01,异或以后是10,把值赋给了a,完成了交换。

    4)利用对象或者数组

    var a = 1,b = 2;
    a={'a':a,'b':b};
    b=a.a;
    a=a.b;
    console.log("a : " + a + ",b : " + b);
    

    或者

    var a = 1,b = 2;
    a=[a,b];
    b=a[0];
    a=a[1];
    console.log("a : " + a + ",b : " + b);
    
    

    这里需要注意的是把a和b的值给到对象或者数组上以后,再次赋值的顺序问题,如上,把值都保存到a中后,再次赋值的时候一定先给b赋值,然后在重新给a赋值才可以。

    5)利用运算符优先级

    var a = 1,b = 2;
    a = [b,b=a][0];
    console.log("a : " + a + ",b : " + b);
    

    具体是怎么赋值的过程我也不是很清楚,希望指教。这里应该需要知道js解析机制,预解析和运算符的优先级等知识点。

    6)ES6的结构赋值

    [a,b]=[b,a];
    

    具体的去看ES6结构赋值的知识点吧阮一峰:ES6入门

  • 相关阅读:
    C# 串口通信总结
    配置文件的读写
    配置文件入门
    锁机制与原子操作 <第四篇>
    线程池 异步I/O线程 <第三篇>
    线程池之ThreadPool类与辅助线程
    这一篇sigmoid和softmax的比较,讲的不错
    今天看到的关于深度学习的一篇文章,可以好好学习下
    git各种命令 & git merge和git rebase的区别
    ORA-19815,ORA-19809 :limit exceeded for recovery files
  • 原文地址:https://www.cnblogs.com/bonly-ge/p/9150210.html
Copyright © 2011-2022 走看看