Object spread と Object.assign の違い 質問する

Object spread と Object.assign の違い 質問する

変数がありoptions、デフォルト値を設定したいとします。

これら 2 つの選択肢の利点と欠点は何ですか?

オブジェクトスプレッドの使用

options = {...optionsDefault, ...options};

またはObject.assign

options = Object.assign({}, optionsDefault, options);

これは専念それは私に疑問を抱かせました。

ベストアンサー1

これは必ずしも網羅的ではありません。

スプレッド構文

options = {...optionsDefault, ...options};

利点:

  • ネイティブ サポートのない環境で実行するためのコードを作成する場合は、この構文をコンパイルするだけで済む場合があります (ポリフィルを使用するのではなく)。(たとえば、Babel を使用する場合)

  • 冗長性が少なくなります。

デメリット:

  • この回答が最初に書かれたとき、これは提案、標準化されていません。提案を使用する場合は、現在それを使用してコードを記述し、標準化されなかったり、標準化に向けて進むにつれて変更されたりした場合にどうするかを検討してください。これは、ES2018 で標準化されました。

  • 文字通りであり、動的ではありません。


Object.assign()

options = Object.assign({}, optionsDefault, options);

利点:

  • 標準化されました。

  • 動的。例:

    var sources = [{a: "A"}, {b: "B"}, {c: "C"}];
    options = Object.assign.apply(Object, [{}].concat(sources));
    // or
    options = Object.assign({}, ...sources);
    

デメリット:

  • より詳細。
  • ネイティブ サポートのない環境で実行するためのコードを作成する場合は、ポリフィルが必要です。

これは私が疑問に思ったコミットです。

それはあなたが尋ねていることとは直接関係ありません。そのコードは を使用しておらずObject.assign()、同じことを行うユーザーコード ( ) を使用していました。彼らはそのコードを Babel でコンパイルしている (そして Webpack でバンドルしている) ようですが、それが私が話していたことです。つまり、コンパイルできる構文です。彼らはどうやら、ビルドに組み込まれる依存関係としてobject-assign含めるよりも、それを好んだようです。object-assign

おすすめ記事