【问题标题】:Javascript object destructuringJavascript对象解构
【发布时间】:2015-01-09 15:59:02
【问题描述】:

为什么在使用新的 es6 解构语法时这无效

var a, b, c;
{a, b, c } = {a:1, b:2, c:3};

当这是:

var {a, b, c } = {a:1, b:2, c:3};
console.log(a, ' ', b, ' ',c);

所以是这样的:

var a = 1;
var b = 3;

[a, b] = [b, a];

我阅读了the MDN documentataion,但没有看到我正在尝试使用的语法,我认为一定有充分的理由,我只是想了解原因。

【问题讨论】:

  • 对我而言,MDN 文档暗示您可以做您想做的事情。

标签: javascript ecmascript-6


【解决方案1】:

在您的示例中,第一个 { 不明确,解析器会将其解释为 的开头。虽然{a, b, c} 是有效块,但以下赋值运算符无效。

用括号括起来,它会正确解析:

({a, b, c} = {a:1, b:2, c:3});

Example


这类似于单独拥有一个对象字面量(无论出于何种原因):

{"a": 42}   // parse error
({"a": 42}) // works

【讨论】:

  • 使用 traceur 时,我会得到 Invalid left-hand side in assignment({a, b, c} = {a: 1, b: 2, c: 3}); 为我工作。
  • @JMM:是的,我以前也有过,但 esprima 正在正确解析我的情况。我其实不知道什么是正确的。我想用括号括起来更安全(更新)。
  • 好吧,我以为你做到了,然后我又看了一遍,发现它有所不同,但没有显示编辑——我猜它是在某个超时之前发生编辑时发生的。值得注意的是,链接到的 MDN 文章 @Raoul 暗示您可以做他想做的事。
  • 哦,我明白了。我没看文章。我不知道它是否应该在某个时候起作用,我想这取决于解析器。
  • 啊哈,这完全有道理,我忙于思考新语法,忘记了基本的解析规则:) 这在 6to5 中也很有效。谢谢。
猜你喜欢
  • 2020-06-14
  • 2019-06-15
  • 1970-01-01
  • 2017-06-11
  • 2020-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-04
相关资源
最近更新 更多