JavaScript
TypeError: undefined is not an object (evaluating 'obj.name')
存在しないオブジェクトのプロパティにアクセスしている
こんな症状
undefinedな変数にドット記法でアクセスしてエラーになる。オブジェクトの初期化忘れで起きやすいよ。
まず試す
アクセス前に変数を初期化する(let arr = [])か、オプショナルチェーン obj?.name を使う。
js
// ❌ undefined に push
let arr;
arr.push(1);
// ✅ 初期化してから使う
let arr2 = [];
arr2.push(1);これで直らなければ、下の「自分のケース」を確認。
🔍 自分のケースはどれ?
- ✓オブジェクト/配列の初期化を忘れた
→ let arr = []; let obj = {}; のように初期化する。 - ✓関数の戻り値が undefined
→ return を書き忘れていないか確認する。 - ✓非同期の結果が届く前にアクセス
→ await やコールバックの中でアクセスする。obj?.name でガードも有効。
なぜ起きる?
変数がundefinedのままプロパティにアクセスしているよ。オブジェクトの初期化忘れ、関数の戻り値がundefined(returnを書き忘れ)、非同期処理の結果がまだ届いていない、などが原因だよ。undefinedのプロパティにアクセスするとTypeErrorになるよ。
✕ エラーが起きるコード
let arr;
arr.push(1);
// undefined に push✓ 直したコード
let arr = [];
arr.push(1);✅ 直ったか確認
プロパティアクセスが TypeError なく動けばOK。
この解決法は役立ちましたか?
🔗 関連するエラー
- Uncaught ReferenceError: xxx is not defined — 変数・関数名のタイポ
- TypeError: xxx is not a function — 関数でないものを呼び出している
- Uncaught TypeError: x.forEach is not a function — forEachできない値に対してforEachしている
- Uncaught TypeError: Cannot read properties of undefined (reading 'length') — undefinedに対して.lengthを読んでいる
- Expected an assignment or function call — 式を書いただけで代入も呼び出しもしていない
🔗 別カテゴリの関連エラー
📖 この問題を学べるレッスン
✏️ 手を動かして練習
📝 関連ブログ記事
- プログラミングのエラーメッセージの読み方 — エラーの読み方を基礎から解説
- JavaScriptとは?初心者向けにわかりやすく解説 — 変数・関数・イベントの基本
- JavaScriptでボタンクリックを動かす方法 — ボタンクリック時の動作を解説