2016-08-06 7 views
3

Was ist die Interpretation dieser Zeile in Javascript.Die Interpretation einer Zeile Javascript-Code

var x[],matrix[],n; 
... 
n = (matrix = x) && matrix.length; 

Obwohl ich suchte, konnte ich keine Tipps finden.

Danke

+0

Haben Sie versucht, es auszuführen? Was war das Ergebnis? Was hat dich überrascht? – jonrsharpe

+0

n ist ein boolescher Wert, wenn die Matrix ein Array mit der Länge und x ein Array ist, das gleich x – Kosch

+1

ist 'matrix = x; n = matrix && matrix.length; ' –

Antwort

8

Es tut dies:

  1. den Wert von x zu matrix Ordnet; Das Ergebnis des Ausdrucks matrix = x ist der Wert, der zugewiesen wurde (dies gilt für alle Zuweisungsausdrücke). Nennen wir diesen Wert "x-Wert". Ich will es von nun an nicht x nennen, weil x nur einmal ausgewertet wird.
  2. Wenn x-Wert truthy (nötigt zu true), es ordnet matrix.length zu n; Weist andernfalls x-value n zu.

So zum Beispiel, wenn x[] ist, setzt der Code matrix auf den gleichen leeren Array Punkt x tut und setzt n zu 0 (matrix.length nach der Zuweisung). Andere Beispiele (ich habe diese geschrieben, bevor Sie Ihre Frage bearbeiten): Wenn x"foo" ist, setzt sie matrix zu "foo" und setzt n-3 (die length von matrix). Wenn x ist "" (a falsy Wert) ist, setzt es matrix zu ""und Sätze n zu "". Wenn x{foo:"bar"} ist, setzt es matrix auf dasselbe Objekt und setzt n auf undefined (da das Objekt keine length Eigenschaft hat). Du hast die Idee.

# 2 oben kommt zustande, weil && ist nicht nur eine einfache logische AND-Operator. a && b funktioniert wie folgt:

  1. a Bewerten Sie seinen Wert zu erhalten; Nennen wir, dass a-Wert
  2. Wenn a-Wert ist falsy, das Ergebnis der && Operator a-Wert
  3. Ansonsten bewerten ist b und machen, dass das Ergebnis der && Betreiber

"Truthy" -Werte sind alle Werte, die nicht "falsy" sind. Die Falsy-Werte sind 0, null, undefined, "", NaN und natürlich false.

+0

Nützliche Ressource als Referenz, wenn über truthy/falsey Werte in JavaScript sprechen: https://dorey.github.io/JavaScript-Equality-Table/ – vlaz

+0

@ T.J.Crowder Vielen Dank für die Erklärung. – Saman

0

(matrix = x) ist der Zuweisungsvorgang von x in eine Variable matrix. Hier ist x ein Array, daher ergibt das Ergebnis dieser Operation einen truthigen Wert, und daher findet der spätere Teil statt.

z. wenn

var x, matrix = [], n; 
n = (matrix = x) && matrix.length; 

wird nicht funktionieren, da die (matrix = x) ein falsy Betrieb ist. n wird undefined zugewiesen (weil das der Wert x ist).

+1

"' (matrix = x) 'ist eine Falsy-Operation. N bleibt' undefined' "auch erwähnenswert, dass dies irreführend ist -' n' nicht _stay_ undefined, es wird der 'undefined' Wert zugewiesen. Es ist ein kleiner, aber wichtiger Unterschied, denn wenn 'x' gleich' '' 'wäre, wäre' n' auch '' '' danach oder wenn 'n' einen Wert hätte, wäre es jetzt 'undefined'. Die Zuweisung ändert den Wert, nur in Ihrem spezifischen Beispiel würde es den gleichen Wert wie zuvor ändern. – vlaz

+0

Korrekt @VLD Stark hingewiesen. Mein Fehler. Wenn die Operation "(matrix = x)" einen Falschwert zurückgibt, wird "n" einem "undefinierten" Wert zugewiesen. Werde Dich auf dem Laufenden halten. – Ayan

Verwandte Themen