1. 肩書きを渡したとき
  2. 肩書きを省略したとき既定値が使われる
  3. 別の人でも動く
  4. null を渡すと既定値は使われない
コース一覧
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分

デフォルト引数

デフォルト引数が出る条件
解説

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

  • 引数の後ろに = と値を書くと、省略されたときの既定値になります
  • 既定値が使われるのは、引数が undefined のときだけです

渡し忘れると、画面に undefined と出る

スキル一覧に、習熟度を添えた 1 行を出す関数を用意したとします。

JavaScript

function skillLine(skill, level) { return skill + "(" + level + ")"; } console.log(skillLine("CSS", "実務で使える")); // => CSS(実務で使える) console.log(skillLine("JavaScript")); // => JavaScript(undefined)

渡されなかった引数は undefined になり、それがそのまま文字列に混ざりました。ユーザーから見れば意味不明な表示で、明らかなバグです。呼び出す側に「必ず 2 つ渡してください」と約束させることもできますが、関数の側で備えておくほうが確実です。

引数の後ろに = と値を書くだけで、省略されたときに使う値を決められます。

JavaScript

function skillLine(skill, level = "学習中") { return skill + "(" + level + ")"; } console.log(skillLine("JavaScript")); // => JavaScript(学習中) console.log(skillLine("CSS", "実務で使える")); // => CSS(実務で使える)

渡せばその値が使われ、渡さなければ既定値が使われます。よく使う値を既定値にしておけば、ほとんどの呼び出しは引数 1 つで済みます。アロー関数でもまったく同じ書き方ができます。

空文字列や null は、既定値に置き換わらない

ここがいちばんのつまずきどころです。既定値が使われるのは、引数が undefined のときだけです。

渡した値使われる値
何も渡さない既定値
undefined既定値
nullnull
"" 空文字列""
00

入力欄が空のまま送信されると、届くのは undefined ではなく空文字列です。API から返ってくる値は null のことがよくあります。どちらも既定値には倒れないので、そこまで面倒を見たいなら関数の中で level ?? "学習中" のように自分で書きます。第 3 章で学んだ ?? は null と undefined の両方に反応する、というのが違いです。

省略できる引数は、右に置く

既定値のある引数は、なるべく後ろに並べます。前に置くと、省略したいときに undefined をわざわざ書いて渡す羽目になります。

JavaScript

// 使いにくい function bad(level = "学習中", skill) { return skill + "(" + level + ")"; } console.log(bad(undefined, "JavaScript")); // 使いやすい function good(skill, level = "学習中") { return skill + "(" + level + ")"; } console.log(good("JavaScript"));

必須の引数を左、省略できる引数を右。この並びを守るだけで、関数の使い心地が変わります。既定値には固定の値だけでなく式も書けますが、参照できるのは自分より前に並んでいる引数だけです。既定値は左から順に決まるためです。

よくある間違い

  • 既定値を書いたから null 対策も済んだと思い込む — skillLine("JavaScript", null) は JavaScript(null) になります。既定値は undefined にしか反応しません
  • 既定値のある引数を飛ばして呼ぶ — 引数は書いた順に前から詰められます。2 つめを省いて 3 つめだけ渡す、という呼び方はできません

要件

  1. 関数名は makeProfileLine にすること
  2. 引数は name と role の 2 つ。role にデフォルト引数 準備中 を設定すること
  3. name + / + role の形の文字列を return すること
  4. role を省略した呼び出しでも文字列が崩れないこと

入出力例

makeProfileLine("山田 太郎", "Web エンジニアを目指しています") → "山田 太郎 / Web エンジニアを目指しています" makeProfileLine("山田 太郎") → "山田 太郎 / 準備中" makeProfileLine("鈴木 花子", "デザイナー") → "鈴木 花子 / デザイナー" makeProfileLine("山田 太郎", null) → "山田 太郎 / null"

ヒント

省略できる引数には、引数の後ろに = と値を書いて既定値を持たせます

function makeProfileLine(name, role = "準備中") { ... } の形です

区切りは半角スペース、スラッシュ、半角スペースの 3 文字です。スペースの数に注意してください

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

関連レッスン

  • 早期 return でネストを浅くする

    関数の冒頭で不正な入力をはじいてしまい、本体を浅いインデントで書く書き方を学びます。ガード節、または早期 return と呼ばれます。

  • 変数のスコープ

    宣言した変数がどこから見えるかという範囲について学びます。関数の外を汚してしまうバグを、ローカル変数に直して防ぎます。

  • コールバック関数

    他の関数に引数として渡し、あとで呼んでもらう関数について学びます。第9章でボタンのクリックに反応させるとき、この仕組みがそのまま使われます。

  • forEach で配列をまわす

    配列の各要素に対してコールバック関数を順番に呼んでくれるメソッドを学びます。作品一覧の組み立てを forEach で書き直します。

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

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

  • 引数位置引数=順番で渡す。
  • 関数処理に名前を付けて再利用できる単位
  • アロー関数=> で書く軽量な関数。this を継承する
  • デフォルト引数引数省略時の値を = で指定する記法
main.js
学習モード
エディタを読み込んでいます

メモ

デフォルト引数

⌘S で保存