ES2015在相同范围内两次构造对象

Mat*_*t K 7 ecmascript-harmony ecmascript-6

是否有一种干净的方法来从同一范围内的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
}
Run Code Online (Sandbox Code Playgroud)

dfr*_*man 13

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

function(oldState, newState) {
  let {foo, bar} = oldState;
  // do stuff //
  ({foo, bar} = newState);
}
Run Code Online (Sandbox Code Playgroud)