交换变量的值
题目: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入门