如何在JavaScript中对现有变量进行去结构化的对象

19 阅读1分钟

我遇到了这个问题。我正在调用一个函数来获取一些数据。

const doSomething = () => {
  return { a: 1, b: 2 }
}

const { a, b } = doSomething()

但我需要把它包在一个if 块中,只有在用户登录的情况下才执行这一行,而把const 的声明移到if 块中,使得这些变量在该块之外是看不见的。

所以我想先声明这些变量,作为未定义的变量,然后在数据进来的时候更新它们。

第一部分很容易。

接下来才是 "棘手 "的部分,因为我们在对象解构之前删除了const ,但我们还需要把所有的行都包进括号里。

let a, b

const doSomething = () => {
  return { a: 1, b: 2 }
}

if (/* my conditional */) {
  ({ a, b } = doSomething())
}

另外,如果你像我一样不喜欢使用分号,你需要这一行之前添加一个分号,以防止可能出现的括号周围的问题(如果你使用的话,Prettier也应该自动为你添加)。

let a, b

const doSomething = () => {
  return { a: 1, b: 2 }
}

if (/* my conditional */) {
  ;({ a, b } = doSomething())
}

这一点是需要的,就像我们在有一个IIFE(即时调用的函数表达式)的时候需要这样做。

以防止JavaScript在不同的行中出现混乱的代码,但不以分号结束。