Contenu supplémentaire pour "Comprendre la spécification ECMAScript, partie 2"
Pourquoi o2.foo est-il une AssignmentExpression ?
o2.foo ne ressemble pas à une AssignmentExpression puisqu'il n'y a pas d'affectation. Pourquoi est-ce une AssignmentExpression ?
La spécification autorise en fait une AssignmentExpression à la fois comme argument et comme côté droit d'une affectation. Par exemple :
function simple(a) {
console.log('L'argument était ' + a);
}
simple(x = 1);
// → Affiche “L'argument était 1”.
x;
// → 1
…et…
x = y = 5;
x; // 5
y; // 5
o2.foo est une AssignmentExpression qui n'assigne rien. Cela découle des productions grammaticales suivantes, chaque une prenant le cas « le plus simple » jusqu'à la dernière :
Une AssignmentExpression n'a pas besoin d'avoir une affectation, elle peut aussi être juste une ConditionalExpression :
(Il existe d'autres productions également, ici nous montrons uniquement celle pertinente.)
Une ConditionalExpression n'a pas besoin d'avoir une condition (a == b ? c : d), elle peut aussi être simplement une ShortcircuitExpression :
Et ainsi de suite :
ShortCircuitExpression : LogicalORExpression
LogicalORExpression : LogicalANDExpression
LogicalANDExpression : BitwiseORExpression
BitwiseORExpression : BitwiseXORExpression
BitwiseXORExpression : BitwiseANDExpression
BitwiseANDExpression : EqualityExpression