回答:
それは破壊的ですが、パラメーター内に含まれています。破壊なしの同等のものは次のようになります。
const func = o => {
var param1 = o.param1;
var param2 = o.param2;
//do stuff
}
これは、オブジェクトを破壊する割り当てです。私と同じように、ES6のオブジェクト構造化構文はオブジェクトリテラル構造のようには見えませんが、動作しないので、驚くかもしれません。
それはあなたが遭遇した非常に簡潔なフォームをサポートするだけでなく、フィールドとデフォルト引数の名前を変更します:
基本的には、{oldkeyname:newkeyname = defaultvalue、...}です。':'はキーと値の区切り文字ではありません。「=」です。
この言語設計の決定のいくつかの落とし穴は、次のようなことをしなければならないかもしれないということです
;({a、b} = some_object);
余分な括弧は、左中括弧がブロックとして解析されるのを防ぎ、先頭のセミコロンは、括弧が前の行の関数への関数呼び出しとして解析されるのを防ぎます。
詳細については、https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignmentを参照して ください。
オブジェクトの破壊的な割り当て中の重要なエラーはスローされません。それが「未定義」の値で終わるだけです。それは、キーエラーであるか、他のエラーであるにもかかわらず、暗黙的に「未定義」として伝搬されたものです。
> var {rsienstr: foo, q: bar} = {p:1, q:undefined};
undefined
> foo
undefined
> bar
undefined
>