2012-03-25 29 views
6

Wie gdoron wies darauf hin,Wie tauscht [b] [b = a, 0] zwischen a und b?

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

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

a tauschen Will und b, und obwohl es ein bisschen Hacky aussieht, hat es meine Neugier ausgelöst, und ich bin sehr gespannt, wie es funktioniert. Es ergibt keinen Sinn für mich.

+2

_ "ein bisschen hacky" _ ??? viel hacky ... :-) – gdoron

+0

Relevant: [Was ist ein besserer Weg, um zwei Argumente zu tauschen?] (http://stackoverflow.com/questions/8482402/whats-a-better-way-to-swap- Zwei-Argument-Werte) –

+0

Wäre es nicht sinnvoller gewesen, zu Godrons anderer Antwort Stellung zu nehmen und um Klärung in Ihrer ursprünglichen Frage zu bitten? –

Antwort

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

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

Lassen Sie uns die letzte Zeile in Stücke brechen:

[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. 

so schließlich ist es a =[b][0] - das erste Objekt in der [b] Array =>b zugewiesen a

Live DEMO

@am nicht lesen Ich bin Kommentare in dieser Frage:
When is the comma operator useful?
Es ist sein Code ...

+0

Also wenn "b" in das Array gelegt wird, ist es sicher? –

+1

@Derek. Es geht nicht verloren, wenn "b = a" – gdoron

1

Es könnte (oder zu behindern) helfen, daran zu denken Bezug auf die semantisch äquivalent Lambda-Konstruktion (hier Parameter c tritt an die Stelle des Elements 0):

a = (function(c) { b = a; return c; })(b); 
Verwandte Themen