3.8Objects / Spread Syntax

オブジェクトのスプレッド構文

オブジェクトを浅くコピーするには、`Object.assign`よりもオブジェクトスプレッド構文を優先します。特定のプロパティを除外した新しいオブジェクトを作成するには、オブジェクトレスト構文を使用します。

スプレッド構文 `{ ...original }` は、イミュータブルな操作を促進します。`Object.assign(target, ...sources)` は第一引数の `target` オブジェクトを直接変更(ミューテーション)してしまう可能性がありますが、スプレッド構文は常に新しいオブジェクトを生成します。これにより、副作用のない予測可能なコードが書けます。レスト構文 `{ a, ...noA }` は、特定のプロパティを除いたオブジェクトのコピーを非常に簡潔に作成できる強力な機能です。

❌ Bad
// bad
const original = { a: 1, b: 2 };
const copy = Object.assign({}, original, { c: 3 }); // copy => { a: 1, b: 2, c: 3 }
✅ Good
// good
const original = { a: 1, b: 2 };
const copy = { ...original, c: 3 }; // copy => { a: 1, b: 2, c: 3 }

const { a, ...noA } = copy; // noA => { b: 2, c: 3 }