JS

スプレッド構文

中級

読み方:スプレッドこうぶん|英語:Spread

配列やオブジェクトを展開する ... の構文で、コピーや結合に便利だよ。いつ使う? 配列のコピーを作りたい、2つの配列を結合したい、オブジェクトの一部を上書きしたいときに使うよ。Reactのstate更新でも必須だよ。間違いやすいポイント: スプレッドは浅いコピー(シャローコピー)だよ。ネストしたオブジェクトは参照が共有されるから、深いコピーが必要ならstructuredClone()を使おう。

やさしい説明

スプレッド構文(...)は、配列やオブジェクトを「展開」する書き方です。中身をバラバラにして別の場所に広げるイメージです。

配列のコピー、配列の結合、オブジェクトのマージ(合体)に使います。元のデータを変更せずに新しいデータを作れるので、Reactの状態管理でも頻繁に使います。

レスト構文(残りをまとめる)としても使えます。関数の引数で「残りの引数をまとめて受け取る」ときに便利です。

具体例・使い方

// 配列のコピー
const copy = [...original];

// 配列の結合
const all = [...arr1, ...arr2];

// オブジェクトのマージ(後が優先)
const updated = { ...user, age: 16 };

// レスト構文(残りをまとめる)
const [first, ...rest] = [1, 2, 3, 4];
// first → 1, rest → [2, 3, 4]

いつ使う?

配列やオブジェクトのコピー、React の setState で状態を更新するとき、関数に配列を引数として渡すとき(Math.max(...numbers))に使います。

間違いやすいポイント

❌ スプレッドは浅いコピー(シャローコピー)

const obj = { a: { b: 1 } };
const copy = { ...obj };
copy.a.b = 99;
obj.a.b; // 99!(ネストしたオブジェクトは共有される)
// 深いコピーが必要ならstructuredClone(obj)を使う

よくある疑問

Q: 配列のスプレッドの使い方は?

A: コピー: [...arr]、結合: [...arr1, ...arr2]、要素追加: [...arr, newItem]。元の配列は変更されません。

Q: オブジェクトのスプレッドの使い方は?

A: コピー: {...obj}、上書き: {...obj, name: '新しい名前'}。後に書いたプロパティが優先されます。

Q: レスト構文との違いは?

A: スプレッド(...)は展開、レスト(...)は残りをまとめる。const [first, ...rest] = arr; のrestがレスト構文です。見た目は同じですが役割が逆です。

関連用語

📖 関連レッスン

レッスンを見る →

関連ブログ記事

⚠️ 関連するエラー

❓ 関連するQ&A