【发布时间】:2020-02-18 06:28:46
【问题描述】:
代码sn-p是:
var a = 'foo'
a || a = 'bar'
我的预期是它可以正常工作,这意味着a最终将是'bar'。但是我遇到了错误
Uncaught SyntaxError: Invalid left-hand side in assignment.
根据报错,我想可能是左边的表达式a || a有问题。看来a || a在这里无效。但是为什么呢?我求助于ecmascript language specification。在12.15.1 静态语义:早期错误,我发现:
如果 LeftHandSideExpression 既不是 ObjectLiteral 也不是 ArrayLiteral 且 LeftHandSideExpression 的 AssignmentTargetType 无效,则为早期参考错误。
所以,LeftHandSideExpression a||a 的AssignmentTargetType 是无效的。但是我很困惑为什么a||a 的AssignmentTargetType 是无效的。关于这个,规范刚刚说:
12.15.3 静态语义:AssignmentTargetType
赋值表达式:
产量表达式
箭头函数
异步箭头函数
LeftHandSideExpression = 赋值表达式
LeftHandSideExpressionAssignmentOperatorAssignmentExpression
- 返回无效。
根据给定的内容,我无法弄清楚为什么 a||a 的 AssignmentTargetType 无效。
我的问题是:为什么a||a = 'bar'会在javascript中出现引用错误?如果是LeftHandSideExpression的AssignmentTargetType无效,为什么a||a无效?
【问题讨论】:
-
=的左侧必须是单个标识符,或有效的解构目标 -
你希望表达式做什么?
-
@Teemu
a将成为“酒吧” -
@Chor 有趣。
a的值是"foo",逻辑 OR 返回其操作数之一的值,在这种情况下,我希望 "foo" = "bar",这没有多大意义..?