【问题标题】:SyntaxError: Invalid destructuring assignment target or ReferenceError: invalid assignment left-hand side?SyntaxError: Invalid destructuring assignment target or ReferenceError: invalid assignment left-hand side?
【发布时间】:2019-03-02 20:49:03
【问题描述】:

我有这个代码示例:

var a = 10;
({a}) = 0;

在谷歌浏览器中显示错误:SyntaxError: Invalid destructuring assignment target

在 Firefox 中,它显示错误:ReferenceError: invalid assignment left-hand side

其实我想了解一下是什么错误?

【问题讨论】:

  • 您希望该代码做什么?
  • @Pointy 只是测试语言
  • 好吧,语言告诉你这是错误的 :) ( ) 是错误的,右侧不是对象,所以也是错误的。
  • 因为您使用了不正确的语法:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 两个浏览器抛出不同的错误还是很有趣的。

标签: javascript ecmascript-6


【解决方案1】:

嗯,这只是无效的语法。你are not allowed 把解构模式放在括号里[1]:

如果 LeftHandSideExpression 既不是 ObjectLiteral 也不是 ArrayLiteralLeftHandSideExpression 的 IsValidSimpleAssignmentTarget 是 false

作为 LeftHandSideExpression({a})ParenthesizedExpression,而不是 ObjectLiteral,并且括号不包含简单的分配目标。

您可能正在寻找a parenthesised statement to allow the destructuring pattern

var a = 10;
({a} = 0);

1:令人惊讶的是,(a) = 0; is a valid statement
2:Chrome 似乎错了,然后抛出 SyntaxError

【讨论】:

  • 嗯,如果这是语法错误,那么在 ecmascript 中到哪里寻找它的错误呢?
  • 我的意思是,如果是 SyntaxError 那么它就是早期错误。我在哪里可以找到?
  • It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is false. 在第 281 页。
  • @JonasWilms 我理解正确,来自({a}) = 0 的这部分代码({a}) 被视为AssignmentPattern
  • @MaximPro 不,AssignmentPattern 的产生式中不允许使用括号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
  • 2021-02-18
相关资源
最近更新 更多