本篇主要說的是JS變量交換之中的數(shù)字交換
數(shù)字交換可能是這里面方法最為豐富的一種了,因?yàn)榭梢杂脭?shù)學(xué)計(jì)算的方法來做,若是字符串、對象則不可以。
借助接三方變量
這大概是最直觀的方法了。不過,這種方法又分為好幾種形式。直接哪一個(gè)例子來說。
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.借助一個(gè)匿名數(shù)組來交換a,b的值;
根據(jù)賦值運(yùn)算符的運(yùn)算方向,先計(jì)算表達(dá)式右邊;
[b,b = a] // 把b,a放入一個(gè)匿名數(shù)組,第二個(gè)元素把a(bǔ)的值賦給b;
[b,b = a][0] // 取出匿名數(shù)組第0個(gè)值即b;
a = [b,b = a][0] // 將取出的值賦給a,交換完成。
a = [ b,b = a][0];
console.log(a); //2
console.log(b); //1
3.同上,借助一個(gè)匿名數(shù)組來交換a,b的值,只不過是寫法不同;
不同的是,該方法利用逗號運(yùn)算符(,)的特性將a的值賦給了b;
在js中,[b][b=a,0]第二個(gè)[]中是一個(gè)鍵值,首先將a的值賦給b;
然后再進(jìn)行逗號運(yùn)算符的運(yùn)算,最后取匿名數(shù)組[b]的第0個(gè)值賦給a,即b本身。
a = [b][b = a,0];
console.log(a); //2
console.log(b); //1
總結(jié):當(dāng)然還可以用顯視數(shù)組或者對象交換,這些本質(zhì)都是借助第三方變量,就不再多說。借助第三方變量的優(yōu)點(diǎn)是不會出現(xiàn)溢出問題。
用數(shù)學(xué)計(jì)算來交換
var a = 1,
b = 2;
1.求和,然后再求出兩個(gè)變量;
缺點(diǎn)是存在溢出限制,一旦a+b的值超出了js中所能保存的極限,就會出錯(cuò)。
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.利用位運(yùn)算;
不會出現(xiàn)溢出問題。
a ^= b;
b ^= a;//其實(shí)這一步是這樣的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