小编典典

没有var的对象分解

javascript

如果对象解构var前面没有关键字,为什么会抛出错误?

{a, b} = {a: 1, b: 2};

抛出 SyntaxError: expected expression, got '='

以下三个示例可以正常工作

var {a, b} = {a: 1, b: 2};
var [c, d] = [1, 2];
    [e, f] = [1, 2];

额外的问题:为什么我们不需要var数组解构?

我在做类似的事情时遇到了问题

function () {
  var {a, b} = objectReturningFunction();

  // Now a and b are local variables in the function, right?
  // So why can't I assign values to them?

  {a, b} = objectReturningFunction();
}

阅读 262

收藏
2020-04-25

共1个答案

小编典典

问题源于{...}运算符在JavaScript中具有多种含义。

{出现在 Statement 的开头时,它将始终代表一个块,该块不能分配给该块。如果它稍后在 Statement中 作为Expression出现,则它将表示一个Object。

var有助于使这种区别,因为它不能跟一个 声明 ,如将分组括号:

( {a, b} = objectReturningFunction() );

根据他们的文档:

注意:当使用不带声明的对象文字解构分配时,必须在赋值语句周围加上括号(…)。

{a,b} = {a:1,b:2}是无效的独立语法,因为左侧的{a,b}被认为是一个块,而不是对象文字。

但是,({a,b} = {a:1,b:2})是有效的,var {a,b} = {a:1,b:2}也有效

您的(…)表达式必须以分号开头,或者可以将其用于执行上一行的功能。

2020-04-25