Мой вопрос: почему a||a = 'bar'
получит ошибку ссылки в javascript?
Это не ошибка ссылки, а синтаксическая ошибка . Это означает, что написанный вами код не может быть проанализирован в допустимой программе.
Если это что-то с недопустимым AssignmentTargetType для LeftHandSideExpression, почему a||a
недопустимо?
Это намного проще, чем это: синтаксис выражения присваивания, среди прочего,
LeftHandSideExpression = AssignmentExpression
Это означает, что в левой части =
нам нужен LeftHandSideExpression
.
||
это LogicalORExpression
, но не LeftHandSideExpression
, и поэтому он не может появляться в этой позиции.
Вы можете думать о различных типах выражения, организованные в иерархию (я упростил следующий пример, пропустив некоторые типы выражений):
AssignmentExpression
^
|
LogicalORExpression
^
|
LeftHandSideExpression
^
|
PrimaryExpression
^
|
Identifier Reference
То есть: ссылка на идентификатор - это PrimaryExpression, это LeftHandSideExpression, et c.
LogicalORExpression
выше в иерархии, что делает его надмножеством, включающим LeftHandSideExpression
. Это означает, что есть некоторые выражения, такие как ||
, которые являются LogicalORExpression
, но не LeftHandSideExpression
.