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