Zusätzlicher Inhalt für "Understanding the ECMAScript spec, Teil 2"
Warum ist o2.foo
ein AssignmentExpression
?
o2.foo
sieht nicht wie eine AssignmentExpression
aus, da es keine Zuweisung gibt. Warum ist es trotzdem eine AssignmentExpression
?
Die Spezifikation erlaubt tatsächlich eine AssignmentExpression
sowohl als Argument als auch auf der rechten Seite einer Zuweisung. Zum Beispiel:
function simple(a) {
console.log('Das Argument war ' + a);
}
simple(x = 1);
// → Gibt „Das Argument war 1“ aus.
x;
// → 1
…und…
x = y = 5;
x; // 5
y; // 5
o2.foo
ist eine AssignmentExpression
, die nichts zuweist. Dies ergibt sich aus den folgenden Produktionsregeln der Grammatik, jede nimmt den "einfachsten" Fall bis zur letzten:
Eine AssignmentExpression
muss keine Zuweisung enthalten, sie kann auch einfach eine ConditionalExpression
sein:
(Es gibt auch andere Produktionsregeln, aber hier zeigen wir nur die relevante.)
Eine ConditionalExpression
muss keine Bedingung (a == b ? c : d
) enthalten, sie kann auch einfach eine ShortcircuitExpression
sein:
Und so weiter:
ShortCircuitExpression : LogicalORExpression
LogicalORExpression : LogicalANDExpression
LogicalANDExpression : BitwiseORExpression
BitwiseORExpression : BitwiseXORExpression
BitwiseXORExpression : BitwiseANDExpression
BitwiseANDExpression : EqualityExpression