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