JavaScriptでオブジェクトを既存の変数に分解する方法

私はこの問題を抱えていました。私はいくつかのデータを取得するために関数を呼び出していました:

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

const { a, b } = doSomething()

しかし、私はこれをに包む必要がありましたifユーザーがログインしている場合にのみこの行を実行するようにブロックします。const内部の宣言ifブロックはそれらの変数をそのブロックの外で見えなくしました。

そのため、最初にこれらの変数を未定義の変数として宣言し、データが到着したときにそれらを更新したいと思いました。

最初の部分は簡単です:

let a, b

「トリッキー」なものが次に来るのは、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が別々の行にあるがセミコロンで終了していないコードを混乱させないようにするため。

私の無料ダウンロードJavaScriptビギナーズハンドブック


その他のjsチュートリアル: