【问题标题】:ES2015 Destructure object twice in same scopeES2015 在同一范围内两次解构对象
【发布时间】:2016-03-19 02:17:06
【问题描述】:

是否有一种简洁的方法可以从同一范围内的 2 个相似对象中解构相同的变量?

function(oldState, newState) {
  let {foo, bar} = oldState;
  // do stuff //
  let {foo, bar} = newState; // illegal double declaration in same scope
  {foo, bar} = newState; // illegal, not sure why
  let {foo: foo1, bar: bar1} = newState; // legal but ugly
  foo = newState.foo; // legal, but requires multiple lines
}

【问题讨论】:

    标签: ecmascript-6 ecmascript-harmony


    【解决方案1】:

    您可以将赋值包装在括号中,以通过解构重新分配变量。这是必要的原因是因为否则解析器假定{ 开始一个块而不是对象文字或赋值模式。 This blog post 更详细地解释了情况。

    function(oldState, newState) {
      let {foo, bar} = oldState;
      // do stuff //
      ({foo, bar} = newState);
    }
    

    【讨论】:

    • 并不是说这里的{...} 也不表示对象字面量。
    • 没错,从技术上讲,它是一个ObjectAssignmentPattern,但重点仍然是,在声明位置中任何有前导花括号且不是块声明的东西都会很糟糕:)
    猜你喜欢
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    相关资源
    最近更新 更多