Contenido adicional para "Entendiendo la especificación ECMAScript, parte 2"
¿Por qué es o2.foo
una AssignmentExpression
?
o2.foo
no parece una AssignmentExpression
ya que no hay asignación. ¿Por qué es una AssignmentExpression
?
La especificación permite en realidad una AssignmentExpression
tanto como argumento como en el lado derecho de una asignación. Por ejemplo:
function simple(a) {
console.log('El argumento fue ' + a);
}
simple(x = 1);
// → Registra “El argumento fue 1”.
x;
// → 1
…y…
x = y = 5;
x; // 5
y; // 5
o2.foo
es una AssignmentExpression
que no asigna nada. Esto se deduce de las siguientes producciones gramaticales, cada una tomando el caso "más simple" hasta la última:
Una AssignmentExpression
no necesita tener una asignación, también puede ser simplemente una ConditionalExpression
:
(También hay otras producciones, aquí mostramos solo la relevante.)
Una ConditionalExpression
no necesita tener una condicional (a == b ? c : d
), también puede ser simplemente una ShortcircuitExpression
:
Y así sucesivamente:
ShortCircuitExpression : LogicalORExpression
LogicalORExpression : LogicalANDExpression
LogicalANDExpression : BitwiseORExpression
BitwiseORExpression : BitwiseXORExpression
BitwiseXORExpression : BitwiseANDExpression
BitwiseANDExpression : EqualityExpression