なぜJavaScriptのエラーがわかりにくいのか?:付録

JavaScriptのエラーの考え方。PHPとの設計の違い

JavaScriptは「エラーをなるべく表に出さず、何かしらの値(例:undefined)を返して処理を続ける」設計になっています。これは、ユーザーが操作中に画面が止まったりフリーズしたりしないようにするための「寛容な仕様」です。PHP のようにエラーに厳しめの姿勢をもつサーバーサイドのプログラムと異なり、JavaScriptは「とりあえず undefined などにして返しておくよ〜」という設計です。

言語の成り立ちの違いもある

言語成り立ち意図された用途
PHPWebページを安全に生成するための言語(HTML生成中心)サーバー側の正確な処理とエラーハンドリング重視
JavaScriptユーザーの操作に応じて動的にUIを動かすための言語即座の反応と柔軟な挙動重視(失敗しても止まらない)

PHP はサーバーサイドなので、「とにかく結果を出して処理を進める」「文字列でも計算できるように」という姿勢に対して、JavaScript はクライアント側で、「エラーで止まるより、見た目上の動作を重視しよう」「文字列なら文字列として扱う」という設計になっています。そのためエラーが発見しにくい場面があります。

比較項目PHP(サーバー)JavaScript(ブラウザ)
実行環境サーバーブラウザ
エラー表示画面に即エラー(Fatalなど)
またはログに記録
画面には表示されず、開発者ツールで確認
実行継続致命的なエラーで即停止軽微なエラーは無視して続行
エラー確認法ini_set('display_errors', 1)error_log()console.log()console.error()try…catch
開発支援ツールエラーメッセージが比較的親切内容がわかりにくいこともある

JavaScriptのエラーに強くなるための基本

DevToolsを毎回開く習慣

  • Consoleタブで赤文字のエラーを確認
  • 行番号をクリックするとコード行に移動

代表的なエラー種別を把握

  • ReferenceError: 未定義変数にアクセス
  • TypeError: 型が合わない操作
  • SyntaxError: 文法ミス
  • Uncaught …: 例外処理されていないエラー

デバッグ力を高める方法

  • console.log()typeofArray.isArray() で変数確認
  • Chrome DevToolsでブレークポイントやステップ実行

書き方で防ぐコーディング習慣

  • letconst を使い、varは非推奨
  • 初期化されていない変数は使わない
  • 戻り値の型を常に意識(undefined、配列など)
  • === を使って厳密比較

なぜ戻り値を意識するべきか?

関数の戻り値がわからないと、次のようなミスを起こしやすくなります:

  • length を使ったら undefined.length エラーになった
  • forEach() を呼んだら not a function エラーになった
  • 戻り値が true と思ってたら undefined だった

JavaScript関数・メソッド100選(型分類)

この一覧は、JavaScriptの代表的な関数・メソッドを型カテゴリごとに整理したものです。型や戻り値、主な用途を意識しながら使い分ける習慣をつけましょう。

スクロールできます
関数・メソッド名型カテゴリ戻り値主な用途
querySelectorDOMElement or null要素をCSSセレクタで取得
querySelectorAllDOMNodeList複数要素を取得
getElementByIdDOMElement or nullIDで要素を取得
getElementsByClassNameDOMHTMLCollectionクラス名で要素取得
getElementsByTagNameDOMHTMLCollectionタグ名で要素取得
createElementDOMElement新しい要素を作成
appendChildDOMElement子要素を追加
removeChildDOMElement子要素を削除
textContentDOMstring要素のテキストを取得/変更
innerHTMLDOMstring要素のHTMLを取得/変更
mapArrayArray配列の要素を変換して新しい配列を返す
filterArrayArray条件を満たす要素のみ抽出
findArrayElement or undefined条件に一致する最初の要素を返す
forEachArrayundefined各要素に対して関数を実行
someArrayboolean一部の要素が条件を満たすか確認
everyArraybooleanすべての要素が条件を満たすか確認
reduceArrayany配列を1つの値に集約
includesArrayboolean特定の値が含まれるか判定
indexOfArraynumber値の最初の位置を返す
pushArraynumber末尾に要素を追加
popArrayElement末尾の要素を削除
shiftArrayElement先頭の要素を削除
unshiftArraynumber先頭に要素を追加
sliceArrayArray一部の要素を切り出す
spliceArrayArray配列から要素を削除または追加
joinArraystring要素を連結して文字列に
reverseArrayArray要素を逆順に並べ替える
sortArrayArray要素を並べ替える
toUpperCaseStringstring大文字に変換
toLowerCaseStringstring小文字に変換
trimStringstring前後の空白を削除
replaceStringstring一部の文字列を置換
substringStringstring部分文字列を取得
splitStringArray文字列を配列に分割
charAtStringstring指定位置の文字を取得
includesStringboolean文字列が含まれているか確認
indexOfStringnumber文字の位置を取得
startsWithStringboolean先頭が一致するか判定
Object.keysObjectArrayプロパティ名一覧を取得
Object.valuesObjectArrayプロパティ値一覧を取得
Object.entriesObjectArrayキーと値のペアを取得
Object.assignObjectObjectオブジェクトをマージ
Object.hasOwnObjectbooleanプロパティの存在確認
hasOwnPropertyObjectbooleanプロパティの有無を確認
parseIntNumbernumber文字列を整数に変換
parseFloatNumbernumber文字列を小数に変換
isNaNNumberbooleanNaNかどうか判定
isFiniteNumberboolean有限値か判定
toFixedNumberstring小数点以下の桁数を整形
BooleanBooleanboolean真偽値に変換
!!Booleanboolean強制的に真偽値へ変換
typeofanystring変数の型を判定
Array.isArrayanyboolean配列かどうか判定
console.loganyundefinedログを出力
console.erroranyundefinedエラーを出力
alertanyundefinedポップアップ表示
confirmanyboolean確認ダイアログを表示
promptanystring or null入力ダイアログを表示
fetchPromisePromiseHTTPリクエストを送る
thenPromisePromise非同期処理の後続処理
catchPromisePromiseエラーハンドリング
finallyPromisePromise常に最後に実行
setTimeoutGlobalnumber遅延実行
clearTimeoutGlobalundefinedタイマー停止
setIntervalGlobalnumber繰り返し実行
clearIntervalGlobalundefined繰り返し停止

補足:型カテゴリの解説

上記で紹介した関数・メソッドは、「どの型に属するのか?」によって役割や使い方が大きく変わります。以下に各カテゴリの概要をまとめました。

DOM(Document Object Model)

  • 対象: HTMLドキュメント内の要素
  • 特徴: 画面上の見た目・構造に直接作用。HTML要素を取得・追加・削除・変更できる。
  • 主なメソッド: getElementById()querySelector()createElement()appendChild()

Array(配列)

  • 対象: 値の集まり(リスト)
  • 特徴: 複数データを順番に管理。要素の抽出・変換・並び替えが中心。
  • 主なメソッド: map()filter()push()splice()

String(文字列)

  • 対象: 文章や単語などの文字列
  • 特徴: 一文字ずつ操作したり、検索・置換・分割が可能。
  • 主なメソッド: toUpperCase()trim()split()replace()

Object(オブジェクト)

  • 対象: 名前と値(キーとバリュー)のセット
  • 特徴: データ構造の基本単位。プロパティの一覧取得やコピーが可能。
  • 主なメソッド: Object.keys()Object.entries()Object.assign()

Number(数値)

  • 対象: 整数や小数などの数値
  • 特徴: 計算や丸め処理などに使用。
  • 主なメソッド: parseInt()toFixed()isNaN()

Boolean(真偽値)

  • 対象: true または false
  • 特徴: 条件分岐(ifwhile)で使用される。
  • 主な例: Boolean()!!変数

Global / any(どの型にも使える)

  • 対象: 型を問わず使用可能な汎用関数
  • 特徴: 型の判定やデバッグ、ダイアログ表示など
  • 主なメソッド: typeofArray.isArray()console.log()alert()

Promise / Async(非同期処理)

  • 対象: 時間のかかる処理(例:データ取得、タイマー)
  • 特徴: 処理完了を待ってから次の処理へ。thencatch などで連結。
  • 主なメソッド: fetch()then()catch()setTimeout()

JavaScriptの「エラーが出にくい」仕様は便利ですが、初心者が気づきにくい落とし穴でもあります。
だからこそ、型と戻り値を意識したコード設計が、ミスを防ぐ最良の防御策です。