1. ホーム
  2. javascript

[解決済み] オブジェクトスプレッド vs. Object.assign

2022-03-19 13:36:36

質問

例えば options 変数にデフォルト値を設定したい。

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

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

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

またはObject.assignを使用する

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

これは コミット という疑問を抱いた。

解決方法は?

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

スプレッド構文

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() を使用し、ユーザーコード( object-assign を使用することで、同じことができます。彼らはそのコードをBabelでコンパイルしているようです(そしてそれをWebpackにバンドルしています)。私が話していたのは、コンパイルするだけで済む構文ということです。彼らはどうやらその方が object-assign をビルドに組み込む依存関係として使用します。