Conteúdo adicional para "Compreendendo a especificação ECMAScript, parte 2"
Por que o2.foo
é uma AssignmentExpression
?
o2.foo
não parece ser uma AssignmentExpression
, já que não há atribuição. Por que ela é uma AssignmentExpression
?
Na verdade, a especificação permite uma AssignmentExpression
tanto como um argumento quanto como o lado direito de uma atribuição. Por exemplo:
function simple(a) {
console.log('O argumento foi ' + a);
}
simple(x = 1);
// → Registra “O argumento foi 1”.
x;
// → 1
…e…
x = y = 5;
x; // 5
y; // 5
o2.foo
é uma AssignmentExpression
que não atribui nada. Isso decorre das seguintes produções gramaticais, cada uma tomando o caso "mais simples" até a última:
Uma AssignmentExpression
não precisa ter uma atribuição, ela pode ser apenas uma ConditionalExpression
:
(Existem outras produções também, aqui mostramos apenas a relevante.)
Uma ConditionalExpression
não precisa ter uma condicional (a == b ? c : d
), ela pode ser apenas uma ShortcircuitExpression
:
E assim por diante:
ShortCircuitExpression : LogicalORExpression
LogicalORExpression : LogicalANDExpression
LogicalANDExpression : BitwiseORExpression
BitwiseORExpression : BitwiseXORExpression
BitwiseXORExpression : BitwiseANDExpression
BitwiseANDExpression : EqualityExpression