【ぶんかつだいにゅう】

分割代入 とは?

最終更新:
💡 箱の中の値に、まとめて名前を付ける

配列などの要素やオブジェクトのプロパティから値を取り出し、変数へ割り当てる構文。JavaScriptでは配列は並び順、オブジェクトはプロパティ名に対応させる。別の変数名、既定値、残りの値をまとめる書き方もあり、深いコピーとは異なる。

📌 このページのポイント
分割代入:形に合わせて取り出す必要な値に、名前を付ける配列は順番で[10, 20]const [a, b]= [10, 20];a=10 b=20オブジェクトは名前で{ count: 3 }const { count }= { count: 3 };count=3元のデータを、壊す操作ではない
JavaScriptの例。左は要素の順番、右はプロパティ名で値を取り出します。変数名の変更、既定値、残りを受け取るrestは本文で説明しています。
ひよこ ひよこ
分割代入って、何を分けるの?
ペンギン先生 ペンギン先生
JavaScriptなら「const [first, second] = [10, 20];」でfirstに10、secondに20を割り当てられるよ。値の並びに名前を付ける書き方で、元の配列を切り刻む操作ではないんだ。
ひよこ ひよこ
オブジェクトだとどうなる?
ペンギン先生 ペンギン先生
「const { name } = user;」なら、userのnameというプロパティを取り出す。「const { name: userName } = user;」なら変数名はuserNameだよ。元のプロパティ名と変数名が必ず同じ、というわけではないね。
ひよこ ひよこ
値がないときはどうする?
ペンギン先生 ペンギン先生
「const { count = 0 } = data;」ならcountが存在しないかundefinedのとき0を使う。ただしcountがnullならnullのままだよ。また、data自体がnullやundefinedだとオブジェクトの分割代入はエラーになるので、受け取る値を確かめよう。
ひよこ ひよこ
...restって何?
ペンギン先生 ペンギン先生
「const [first, ...rest] = [10, 20, 30];」ならfirstは10、restは[20, 30]になる。残りを受け取るrestは最後に書くよ。新しい配列を作っても、その中にオブジェクトがあると参照を共有するので、深いコピーとは違うんだ。
ひよこ ひよこ
関数でも使える?
ペンギン先生 ペンギン先生
「function greet({ name })」のように、引数から必要な値を取り出せるよ。ただし深く入れ子にすると読みにくくなる場合もある。Pythonなどにも値を取り出す似た機能はあるけれど、文法や条件は言語ごとに確認しようね。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「分割代入」って出てきたら「データの形に合わせて値を取り出し、変数へ割り当てる書き方」と思えばだいたいOK!
📖 おまけ:英語の意味
「destructuring assignment」 = 構造から値を取り出す代入
💬 名前は構造を分解するイメージだけれど、元の配列やオブジェクトを壊すという意味ではない。データの形と変数を対応させて読むと分かりやすいよ。

参考資料

← 用語集にもどる