1. title と year がそろっている
  2. year が無いと 年不明 になる
  3. title が無いと 無題 になる
  4. 空オブジェクトなら両方とも既定値
  5. 別の作品でも同じ形になる
コース一覧
JavaScript基礎文法:処理を組み立てる
分割代入

JavaScript基礎文法:処理を組み立てる

if・switch による条件分岐、配列とループ、関数とコールバック、オブジェクトを順に組み立てる全 33 レッスン(525 分)の基礎文法コースです。FizzBuzz、作品リスト、関数への整理、作品データの構造化を通して、入力から結果を返す処理を自分で分解して書きます。DOM 操作は次のコースで扱います。

1
条件分岐
01. if 文の基本15分
02. if / else if / else で段階判定15分
03. switch 文で値を一覧から選ぶ15分
04. 条件を組み合わせる20分
05. FizzBuzz で複数条件を組み立てる20分
06. つくる 時間帯で挨拶を変える20分
07. 第1章まとめクイズ10分
2
配列とループ
01. 配列のきほん15分
02. 要素を足す・取り除く15分
03. for ループで合計を求める15分
04. for-of で配列を走査する15分
05. while で条件を満たす間くり返す15分
06. break と continue でループを制御する15分
07. つくる 作品リストを一覧にする20分
08. 第2章まとめクイズ10分
3
関数
01. 関数宣言15分
02. アロー関数15分
03. デフォルト引数15分
04. 早期 return でネストを浅くする15分
05. 変数のスコープ15分
06. コールバック関数15分
07. forEach で配列をまわす15分
08. つくる 処理を関数に整理する20分
09. 第3章まとめクイズ10分
4
オブジェクト
01. オブジェクトのきほん18分
02. オブジェクトで複数の値を返す16分
03. const と参照18分
04. ?. で安全に取り出す16分
05. 分割代入18分
06. スプレッド構文18分
07. find と includes で探す16分
08. つくる 作品データを構造化する25分
09. 第4章まとめクイズ10分

分割代入

分割代入
解説

このレッスンで分かること

  • const { name, role } = profile で、必要な値をまとめて変数に取り出せます
  • 既定値が効くのは、値が undefined のときだけです

同じ名前を 2 回書く行が並ぶ

オブジェクトから値を取り出す方法は身に付きました。ただ、実際に書いてみると気になることがあります。

JavaScript

function describeProfile(profile) { const name = profile.name; const role = profile.role; const since = profile.since; return name + " / " + role + " / " + since + " 年から"; }

name という単語が 1 行に 2 回出てきます。やっているのは同じ名前の変数に移し替えるだけなのに、行数だけが増えていきます。

JavaScript

const { name, role, since } = profile;

これが分割代入です。箱から必要な値を取り出して名前を付けるための道具で、{} の中に書いたキー名と同じ名前の変数が作られ、対応する値が入ります。要らないキーは書かなくてかまいませんし、キーの名前で対応を取るので順番も自由です。3 行が 1 行になりました。

無いキーには既定値を添えられる

対応するキーが無いときは undefined が入ります。そこで既定値を書けます。

JavaScript

const { role = "学習中" } = { name: "山田 太郎" }; console.log(role); // 学習中 role が無いので既定値になる const { level = 0 } = { level: null }; console.log(level); // null 既定値は使われない

既定値が使われるのは、値が undefined のときだけです。null や 0 や "" が入っていれば、そのままの値が採用されます。この基準は ?? や ?. と同じで、第3章から一貫しています。

キー名をそのまま変数名にしたくないときは、コロン記号で付け替えられます。

書き方意味
const { name } = profileprofile.name を name に取り出す
const { name = "匿名" } = profile無いときは "匿名" を使う
const { name: author } = profile変数名を author に変える
const { name: author = "匿名" } = profile付け替えと既定値を同時に使う

配列でも同じことができますが、こちらは名前ではなく位置で対応を取ります。左辺は [] です。

JavaScript

const [first, second] = ["HTML", "CSS", "JavaScript"]; console.log(first, second); // HTML CSS

オブジェクトは名前で、配列は位置で対応する。この違いが、意味の違う値をオブジェクトで返すべき理由そのものです。

引数の位置で、そのまま開ける

分割代入がいちばん活きるのは関数の引数です。引数の位置に直接 {} を書けます。

JavaScript

function describeSkill({ label, level = 1 }) { return label + " レベル" + level; } console.log(describeSkill({ label: "CSS", level: 3 })); // CSS レベル3 console.log(describeSkill({ label: "HTML" })); // HTML レベル1

呼ぶ側はオブジェクトを 1 つ渡すだけ、関数の中は最初から必要な値が変数になった状態から始められます。既定値も同じように書けるので、キーが欠けた入力もその場で埋まります。

よくある間違い

  • 付け替えの向きを逆にする — 左がキー、右が新しい変数名です。「元の名前 から 新しい名前」の順と覚えます
  • オブジェクトなのに [] で受ける — 配列は []、オブジェクトは {} です。オブジェクトは位置を持たないので、[] では取り出せず TypeError になります

要件

  1. 関数名は formatWork、引数は作品オブジェクト 1 つ
  2. 引数の位置で { title, year } の分割代入を使うこと
  3. title の既定値は "無題"、year の既定値は "年不明"
  4. 戻り値は "タイトル (年)" の形の文字列。カッコの前に半角スペースを 1 つ入れること

入出力例

formatWork({"title":"プロフィールサイト","year":2026}) → "プロフィールサイト (2026)" formatWork({"title":"自己紹介カード"}) → "自己紹介カード (年不明)" formatWork({"year":2026}) → "無題 (2026)" formatWork({}) → "無題 (年不明)" formatWork({"title":"スキル一覧の表","year":2026}) → "スキル一覧の表 (2026)"

ヒント

引数の位置に直接 `{ title, year }` と書けます。関数の中で `work.title` と書く必要はありません

既定値は `{ title = "無題", year = "年不明" }` のように `=` で添えます

戻り値は `title + " (" + year + ")"` です。テンプレートリテラルでも書けます

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/08/05·更新 2026/08/26

関連レッスン

  • スプレッド構文

    ... で配列やオブジェクトの中身を展開する書き方です。元を壊さずにコピーや合成ができます。

  • find と includes で探す

    配列から条件に合う要素を探す道具です。値が欲しいのか位置が欲しいのか有無だけでよいのかで使い分けます。

  • つくる 作品データを構造化する

    第 7 章の総仕上げです。作品オブジェクトの配列から件数と合計閲覧数と最新作をまとめた集計結果を返します。

  • 第4章まとめクイズ

    オブジェクトの作り方と読み方から、参照・分割代入・スプレッド・検索まで、第7章で扱った内容を 5 問で確かめます。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • 変数データに名前をつけて参照する仕組み
  • オブジェクトキーと値のペアで構造を作るデータ
  • 配列サイズ固定の同型データの集まり
  • 引数位置引数=順番で渡す。
  • 関数処理に名前を付けて再利用できる単位
  • 戻り値呼び出し元への返答を表す点線矢印
main.js
学習モード
エディタを読み込んでいます

メモ

分割代入

⌘S で保存