2012-03-25 138 views
6

由於gdoron指出,[b] [b = a,0]如何在a和b之間交換?

var a = "a"; 
var b = "b"; 

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

將交換ab,雖然它看上去有點哈克,它引發了我的好奇,我在它的工作原理很好奇。這對我沒有任何意義。

+2

_「有點哈克」_ ???很多hacky ... :-) – gdoron 2012-03-25 21:59:27

+0

相關:[交換兩個參數值有什麼更好的方法?](http://stackoverflow.com/questions/8482402/whats-a-better-way-to-swap-雙參數值) – 2012-03-25 22:05:30

+0

對Godron的其他答案發表評論並要求澄清您的原始問題是否更有意義? – 2012-03-25 22:36:51

回答

7
var a = "a"; 
var b = "b"; 

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

讓我們最後一行到打碎:

[b]  // Puts b in an array - a safe place for the swap. 
[b = a] // Assign a in b 
[b = a,0] // Assign a in b and return the later expression - 0 with the comma operator. 

所以最後是a =[b][0] - 的[b]陣列中的第一個對象=>b分配給a

Live DEMO

閱讀@am不是我在這個問題上的意見:
When is the comma operator useful?
這是他的代碼......

+0

所以當'b'被放入數組中時,它是安全的嗎? – 2012-03-25 22:01:23

+1

@Derek。當'b = a'時它不會丟失 – gdoron 2012-03-25 22:02:30

1

這可能有助於(或阻礙)認爲它的語義上等價的λ建設方面(在這裏,參數c取元素0的地方):

a = (function(c) { b = a; return c; })(b); 
相關問題