まず結論
エラー名は、最初に確認する場所を絞るための手がかりです。 SyntaxError はコードを読み取る段階、ReferenceError は名前を探す段階、TypeError は値を使う段階で起きます。

SyntaxError:コードを実行する前の文法ミス
閉じ括弧やカンマの不足など、JavaScriptとして読めないコードがあると起きます。該当するスクリプトは実行されません。
const total = (price * count;
まずエラーが示す行と、その直前の行を見ます。JSON.parse() が投げる SyntaxError は、ソースコードではなく受け取ったJSON文字列が対象です。
ReferenceError:名前が見つからない
宣言していない名前や、現在のスコープから見えない変数を読むと起きます。
{
const userName = "Ada";
}
console.log(userName);
// ReferenceError: userName is not defined
変数名の打ち間違い、ブロックや関数の内側で宣言した変数を外側から読んでいないか、letやconstを初期化前に参照していないかを確認します。
TypeError:値にできない操作をした
null や undefined のプロパティを読んだり、文字列ではない値に文字列用メソッドを呼んだりすると起きます。
const profile = null;
console.log(profile.name);
// TypeError: Cannot read properties of null
エラー行の直前で値と型を確認します。
console.log(profile, typeof profile);
optional chaining(profile?.name)は表示を止めないための選択肢ですが、値が null になった理由を調べずに使うと問題を隠します。
読む順番
- エラー名とメッセージを読む
- 最初の自分のコードの行番号へ移動する
- その行で使う名前または値を確認する
- 最小限の修正後、同じ操作をもう一度試す
まとめ
SyntaxError は文法、ReferenceError は名前、TypeError は値の扱いを確認します。エラー名だけで直そうとせず、停止した行で何を参照し、どんな値を使ったかを確かめると原因を切り分けやすくなります。