1. 空の配列に 1 件追加する
  2. 1 件ある配列に追加すると 2 件になる
  3. 2 件ある配列に追加すると 3 件になる
  4. タイトルが空文字でもそのまま追加する
コース一覧
JavaScript基礎文法:処理を組み立てる
const と参照

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 と参照

const が守るもの
解説

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

  • const が禁止しているのは再代入だけで、中身の変更は禁止していません
  • 配列とオブジェクトは、変数に入っているのが値ではなく置き場所です

const で宣言した配列が、勝手に伸びる

const は再代入できない宣言だと習いました。ところが、次のコードはエラーになりません。

JavaScript

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

const で宣言したのに、中身が増えました。一方でこちらは止まります。

JavaScript

skills = ["React"]; // TypeError: Assignment to constant variable.

中身を変えるのは通り、変数そのものに別のものを入れ直すのは通らない。この境界線がこのレッスンのテーマです。const は constant の略ですが、正確な意味は「再代入できない変数」であって「中身が絶対に変わらない値」ではありません。

変数に入っているのは、値か置き場所か

なぜ違いが出るのか。答えは「変数の中に何が入っているか」にあります。

分類型変数に入るもの中身を変えられるか
プリミティブ数値 文字列 真偽値 null undefined値そのもの変える手段がない
オブジェクトオブジェクト 配列 関数置き場所 (参照)変えられる

数値や文字列は、変数の中に値そのものが入っています。値を変える方法は再代入しかなく、その再代入が禁止されているので、結果として絶対に変わりません。配列やオブジェクトは実体が別の場所に置かれ、変数にはそこへの案内札だけが入ります。

JavaScript

const profile = { name: "山田 太郎" }; profile.name = "山田 太郎 (改訂)"; // 通る 案内札の先を書き換えている profile = { name: "別の人" }; // 止まる 案内札を貼り替えようとしている
解説

住所を書いたメモを想像してください。const はメモに別の住所を書き直すことを禁止します。しかし、その住所の家の中で模様替えをすることまでは止められません。

同じ場所を指す 2 つの変数

参照だと分かると、次の挙動にも納得がいきます。

JavaScript

const a = { name: "山田 太郎" }; const b = a; b.name = "佐藤 花子"; console.log(a.name); // 佐藤 花子 a も変わっている

const b = a; は中身をコピーしたのではなく、同じ場所を指す札をもう 1 枚作っただけです。関数に配列やオブジェクトを渡すのも同じことで、渡した先で push すれば呼び出し元の配列が伸びます。事故の種でもありますが、逆に言えば「受け取った配列にそのまま足して返す」関数は、この性質の上に成り立っています。

よくある間違い

  • const なら安全だと思い込む — オブジェクトを関数に渡すことは、書き換える権利を渡すことでもあります。渡した先で何をされるか分からないなら、コピーを渡すほうが安全です
  • 見た目が同じオブジェクトを === で比べる — { a: 1 } === { a: 1 } は false です。中身が同じかではなく、同じ実体かを見ているためです

要件

  1. 関数名は addWork、引数は works と title と year の 3 つ
  2. { title, year } の 2 つのキーを持つオブジェクトを works の末尾に push すること
  3. 戻り値は追加後の works 配列そのもの
  4. 配列を作り直さず push を使うこと

入出力例

addWork([], "プロフィールサイト", 2026) → [{"title":"プロフィールサイト","year":2026}] addWork([{"title":"プロフィールサイト","year":2026}], "自己紹介カード", 2026) → [{"title":"プロフィールサイト","year":2026},{"title":"自己紹介カード","year":2026}] addWork([{"title":"プロフィールサイト","year":2026},{"title":"自己紹介カード","year":2026}], "スキル一覧の表", 2026) → [{"title":"プロフィールサイト","year":2026},{"title":"自己紹介カード","year":2026},{"title":"スキル一覧の表","year":2026}] addWork([], "", 2026) → [{"title":"","year":2026}]

ヒント

追加するオブジェクトは `{ title: title, year: year }` です。省略記法で `{ title, year }` とも書けます

配列の末尾に足すメソッドは `push` です。戻り値は追加後の長さなので `return works.push(...)` としないでください

`const` で受け取った配列でも `push` はできます。禁止されているのは `works = [...]` という再代入だけです

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

関連レッスン

  • ?. で安全に取り出す

    オプショナルチェーンは入れ子のオブジェクトを安全にたどる記号です。途中が無くてもエラーにならず undefined になります。

  • 分割代入

    オブジェクトや配列から必要な値をまとめて変数に取り出す書き方です。既定値や名前の付け替えもできます。

  • スプレッド構文

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

  • find と includes で探す

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

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

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

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

メモ

const と参照

⌘S で保存