探讨一道经典的面试题。(变量交换)

85 阅读1分钟
    var a = 1var b = 2;
    //如何不使用第三个变量,完成ab数值的交换。

方法一:

  a = a + b      // a = 3 
  b = a - b      // b = 3 - 2 = 1
  a = a - b      // a = 3 -1 = 2
  

方法二:

 a = a^b    //求a,b的异或 (将ab转换成二进制,相同取0 不同取1a = 0001   //a的二进制
 b = 0010   //b的二进制 
 a = a^b = 0011   // a的作用是存放 ab的差异的  a^b 前两位是0 说明 二进制ab前两位相同、后两位是1 说明 二进制ab后两位不同。
 b = a^b   // 0011^0010 = 0001  //1 
 a = a^b   // 0011^0001 = 0010  //2
 

方法三:

//使用es6的数组的解构赋值
[b,a] = [a,b]