← エラー辞典に戻る

JavaScript

Uncaught TypeError: Cannot read properties of undefined (reading 'length')

undefinedに対して.lengthを読んでいる

こんな症状

.lengthを使った行でこのエラーが出る。「.lengthが使えない」のではなく、その手前の変数がundefinedになっているのが本当の原因だよ。

まず試す

.length の手前の変数を console.log し、undefined なら『値が入るはずだった場所』をさかのぼって直す。

js
// ❌ return を忘れて戻り値が undefined
function getScores() {
  const scores = [80, 92, 75];
}

// ✅ return する
function getScores() {
  return [80, 92, 75];
}

これで直らなければ、下の「自分のケース」を確認。

🔍 自分のケースはどれ?

  • 変数を宣言しただけで配列/文字列を入れていない
    → 初期値を代入する(例: const items = [])。
  • 関数の return を書き忘れた
    → 戻り値が undefined になる。return を足す。
  • fetch など非同期の結果が届く前に使った
    → await やコールバック・.then の中でアクセスする。
  • プロパティ名のタイポ(items を item など)
    → 正しいプロパティ名に直す。data?.length でガードも有効。

なぜ起きる?

エラーの主役は .length ではなく、その手前にある変数だよ。data.length なら data がundefinedになっているんだ。よくあるのは、(1) 変数を宣言しただけで配列や文字列を代入していない、(2) 関数にreturnを書き忘れて戻り値がundefined、(3) fetchなど非同期処理の結果が届く前にアクセスしている、(4) オブジェクトのプロパティ名のタイポ(items を item と書くなど)、の4つ。reading の部分が 'map' や 'forEach' でも原因と直し方は同じだよ。

✕ エラーが起きるコード
function getScores() {
  const scores = [80, 92, 75];
  // return を書き忘れている
}

const result = getScores();
console.log(result.length);
// Uncaught TypeError: Cannot read properties of undefined (reading 'length')
✓ 直したコード
function getScores() {
  const scores = [80, 92, 75];
  return scores;  // ← return を忘れない
}

const result = getScores();
console.log(result.length); // 3

✅ 直ったか確認

手前の変数が期待した配列/文字列になり、.length が正しい個数を返せばOK。

🆘 まだ直らないときは

値が無いこともある場合は data?.length(オプショナルチェーン)や if (data) でガードすると落ちなくなる。

Q&Aで質問する →

この解決法は役立ちましたか?

🔗 関連するエラー

🔗 別カテゴリの関連エラー

📖 この問題を学べるレッスン

JavaScriptコース(基礎から)で根本から理解する →

✏️ 手を動かして練習

このテーマの図解ドリルで実際に書いて確認する →

📝 関連ブログ記事

📖 関連する用語

🚀 JavaScriptコースで基礎を学ぼう!

エラーの原因を根本から理解するには、基礎を体系的に学ぶのが近道です。完全無料・登録不要。

JavaScriptコースを始める →

❓ 関連するQ&A