2016-07-01 20 views
0

Eines Tages sah ich bestimmte Weise, Elemente in der Reihe zu tauschen. Wie folgt aus:Javascript. Elemente der Reiheninitialisierungsordnung

var arr = [1,2,3]; 
arr[0] = [arr[1], arr[1] = arr[0]][0]; 

Offensichtlich ist diese Methode davon aus, dass der erste Wert des temporären Arrays arr[1] wird vor der zweiten arr[1] = arr[0] berechnet werden.
Otherway beide Werte werden gleich sein. Synthetisches Beispiel:

var x = 1; 
var arr = [x, x += 1, x += 1]; 
arr; // [1,2,3] or [3,3,2] or maybe [3,2,3]? 

Gibt es irgendwelche Garantien, dass Javascript-Interpreter auf diese Weise nicht handelt?

Antwort

1

JS Array initializers sind garantiert von links nach rechts

ArrayAccumulation ausgewertet werden (Elementliste: Elementliste, Elision [opt] AssignmentExpression):

0,1. Lassen Sie postIndex das Ergebnis der Durchführung von ArrayAccumulation für ElementList mit Argumenten Array und nextIndex ...

.4. Sei initResult das Ergebnis der Evaluierung von AssignmentExpression.

@http://www.ecma-international.org/ecma-262/6.0/#sec-runtime-semantics-arrayaccumulation

Es ist besser, nicht auf, dass, obwohl zu verlassen.

+0

"* Aber es ist besser, sich nicht darauf zu verlassen. *" - Huh? Sie können sich absolut darauf verlassen. – Bergi