本篇主要說的是JS變量交換之中的數(shù)字交換
數(shù)字交換可能是這里面方法最為豐富的一種了,因為可以用數(shù)學計算的方法來做览濒,若是字符串、對象則不可以。
借助接三方變量
這大概是最直觀的方法了厨喂。不過,這種方法又分為好幾種形式庄呈。直接哪一個例子來說蜕煌。
var a=1,b=2;
交換a,b的值诬留。
var a = 1,
b = 2;
1.借助變量temp來交換a斜纪,b的值颁褂,最常見的一種,不用多說傀广。
var temp = a;
a = b;
b = temp;
console.log(a); //2
console.log(b); //1
2.借助一個匿名數(shù)組來交換a颁独,b的值;
根據(jù)賦值運算符的運算方向伪冰,先計算表達式右邊誓酒;
[b,b = a] // 把b,a放入一個匿名數(shù)組贮聂,第二個元素把a的值賦給b靠柑;
[b,b = a][0] // 取出匿名數(shù)組第0個值即b;
a = [b,b = a][0] // 將取出的值賦給a吓懈,交換完成歼冰。
a = [ b,b = a][0];
console.log(a); //2
console.log(b); //1
3.同上,借助一個匿名數(shù)組來交換a耻警,b的值隔嫡,只不過是寫法不同;
不同的是甘穿,該方法利用逗號運算符(,)的特性將a的值賦給了b腮恩;
在js中,[b][b=a,0]第二個[]中是一個鍵值温兼,首先將a的值賦給b秸滴;
然后再進行逗號運算符的運算,最后取匿名數(shù)組[b]的第0個值賦給a募判,即b本身荡含。
a = [b][b = a,0];
console.log(a); //2
console.log(b); //1
總結:當然還可以用顯視數(shù)組或者對象交換,這些本質都是借助第三方變量届垫,就不再多說释液。借助第三方變量的優(yōu)點是不會出現(xiàn)溢出問題。
用數(shù)學計算來交換
var a = 1,
b = 2;
1.求和敦腔,然后再求出兩個變量均澳;
缺點是存在溢出限制,一旦a+b的值超出了js中所能保存的極限符衔,就會出錯找前。
a += b;
b = a - b;
a -= b;
console.log(a); //2
console.log(b); //1
2.巧妙利用乘法。
a = b + (b = a)*0;
console.log(a); //2
console.log(b); //1
3.利用位運算判族;
不會出現(xiàn)溢出問題躺盛。
a ^= b;
b ^= a;//其實這一步是這樣的b=b^(a^b)=b^b^a=0^a=a
a ^= b;//同樣a=a^b=(a^b)^a=b;
console.log(a); //2
console.log(b); //1
最后娛樂一下
這是最后一種方法,大家笑笑即好形帮。
a = 2;
b = 1;
console.log(a); //2
console.log(b); //1