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