1. ホーム
  2. javascript

[解決済み] var { ...} の中括弧は何を意味するのでしょうか?} = ...`文は何をするのですか?

2022-06-30 12:29:30

質問

これが Mozilla 固有の JS 構文であるかどうかはわかりませんが、私はしばしばこの方法で宣言された変数を見つけました。 アドオン SDK ドキュメント :

var { Hotkey } = require("sdk/hotkeys");

と、様々なクロームのJavascriptで( let ステートメントが使用されています。 var ),

let { classes: Cc, interfaces: Ci, results: Cr, utils: Cu }  = Components;

私はこの構文が非常にわかりにくいことに気づきましたが、両方の構文に関するドキュメントを見つけることができません。 MDN .

どのように解決するのですか?

どちらもJavaScript 1.7の機能です。最初のものは ブロックレベル変数 :

let では、変数が使用されるブロック、文、または式にスコープを限定して変数を宣言することができます。これは var キーワードとは異なり、ブロックスコープに関係なくグローバルに、または関数全体に対してローカルに変数を定義します。

2つ目は 構造改革 :

デストラクチャリング代入は、配列やオブジェクトのリテラルの構築を反映した構文を使って、配列やオブジェクトからデータを抽出することを可能にします。

...

構造体解除の代入でできる特に便利なことは、1つの文で構造体全体を読み取ることですが、この後の例でいっぱいのセクションで示すように、構造体解除でできる面白いことはたくさんあります。

Pythonに慣れている人にとっては、この構文に似ています。

>>> a, (b, c) = (1, (2, 3))
>>> a, b, c
(1, 2, 3)

最初のコードの塊は、略記です。

var {Hotkey: Hotkey} = require("sdk/hotkeys");
// Or
var Hotkey = require("sdk/hotkeys").Hotkey;

2番目のコードチャンクを次のように書き換えることができます。

let Cc = Components.classes;
let Ci = Components.interfaces;
let Cr = Components.results;
let Cu = Components.utils;