Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么可以';在ECMAScript中,文本不能用作LeftHandside表达式吗?_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript 为什么可以';在ECMAScript中,文本不能用作LeftHandside表达式吗?

Javascript 为什么可以';在ECMAScript中,文本不能用作LeftHandside表达式吗?,javascript,ecmascript-6,Javascript,Ecmascript 6,根据ECMAScript,左侧表达式的定义如下: PrimaryExpression[Yield] : this IdentifierReference[?Yield] Literal ... MemberExpression[Yield] : PrimaryExpression[?Yield] ... NewExpression[Yield] : MemberExpression[?Yield] ... LeftHandSi

根据ECMAScript,左侧表达式的定义如下:

PrimaryExpression[Yield] :
    this
    IdentifierReference[?Yield]
    Literal
    ...

MemberExpression[Yield] :
    PrimaryExpression[?Yield]
    ...

NewExpression[Yield] :
    MemberExpression[?Yield]
    ...

LeftHandSideExpression[Yield] :
    NewExpression[?Yield]
    ...

因此,在这种情况下,
文本
应该能够充当
左手边表达式
,例如
123=456
。但实际上,它不能。有人能解释为什么这不起作用吗?

规范定义了一些不属于语法本身的限制。这些被称为“早期错误”。(ES 2019)定义了赋值表达式的早期错误,其中指出:

如果LeftHandSideExpression既不是ObjectLiteral也不是ArrayLiteral,并且LeftHandSideExpression的AssignmentTargetType无效,则这是早期引用错误

如果我们看一下如何在中为PrimaryExpression定义AssignmentTargetType:


这就是为什么。

规范定义了一些不属于语法本身的限制。这些被称为“早期错误”。(ES 2019)定义了赋值表达式的早期错误,其中指出:

如果LeftHandSideExpression既不是ObjectLiteral也不是ArrayLiteral,并且LeftHandSideExpression的AssignmentTargetType无效,则这是早期引用错误

如果我们看一下如何在中为PrimaryExpression定义AssignmentTargetType:


这就是为什么。

我不是规范阅读方面的专家,但如果使用链替换(我不确定是否使用了正确的术语),我认为
123
不是
NewExpression
@Keith。就像你用它的值替换变量一样。我不是规范阅读方面的专家,但如果你使用链替换(我不确定我是否使用了正确的术语),我想它不是
123
不是
NewExpression
@Keith。就像用变量的值替换变量一样。谢谢你的回答。我也发现了这个规定。我认为这应该是答案,但我不能保证。因为当我尝试
123=456
时,提示是
SyntaxError:Invalid left-side in assignment
,这与法规中提到的
Reference Error
不同。你能解释一下吗?我认为浏览器在报告早期错误方面可能有一定的回旋余地(请参阅),或者可能只是错误地实现了它。如果您查看
++
运算符,它也会显示返回引用错误,但
123++
会导致语法错误。谢谢您的回答。我也发现了这个规定。我认为这应该是答案,但我不能保证。因为当我尝试
123=456
时,提示是
SyntaxError:Invalid left-side in assignment
,这与法规中提到的
Reference Error
不同。你能解释一下吗?我认为浏览器在报告早期错误方面可能有一定的回旋余地(请参阅),或者可能只是错误地实现了它。如果查看
++
操作符,它也会说返回一个引用错误,但是
123++
会导致语法错误。
12.2.1.5 Static Semantics: AssignmentTargetType
  PrimaryExpression:
    this
    Literal
    ...

   Return invalid.