検索
ホームページウェブフロントエンドjsチュートリアルJavaScriptでの適切なエラー処理のガイド

A Guide to Proper Error Handling in JavaScript

キーポイント

  • try…catchステートメントブロックを巧みに使用して例外を効果的に管理し、コールスタックまでエラーをバブルアップできるようにすることでデバッグプロセスを強化し、エラーをより明確に表示します。
  • グローバルなエラーハンドラー(window.onerrorイベントなど)を実装して、アプリケーションのさまざまな部分で管理とメンテナンスを容易にするためにエラー処理を一元化および簡素化します。
  • ブラウザの機能を使用して、詳細なエラー情報(コールスタックを含む)を記録してエラーの診断を改善し、エラーのソースとコンテキストをより明確に理解します。
  • ブロックでtry…catch>を使用するか、すべての実行コンテキストに適したグローバルエラーハンドラーを使用して、非同期エラー処理パズルを修正し、非同期コードのエラーが効果的にキャプチャおよび管理されるようにします。 setTimeout カスタムエラータイプを作成したり、エラーメッセージを強化したりして、特定の問題を識別および解決し、JavaScriptコードの全体的な堅牢性を改善することにより、エラーメッセージを強化します。
  • JavaScriptでのエラー処理には課題がたくさんあります。マーフィーの法則に従ってください。間違っている可能性のあるものはすべて間違っています。この記事では、JavaScriptでのエラー処理、トラップ、ベストプラクティスをカバーし、非同期コードとAjaxを例として説明します。

この記事は、読者のフィードバックに対処するために2017年6月8日に更新されました。具体的には、ファイル名がコードスニペットに追加され、単体テストがクリーニングされ、ラッパーパターンが

に追加され、CORSとサードパーティのエラーハンドラーに関するセクションが追加されました。

uglyHandler JavaScriptのイベント主導のパラダイムは、言語に豊かさを加えると思います。私は自分のブラウザをこのイベント駆動型マシンと考えるのが好きです。エラーも例外ではありません。エラーが発生すると、特定の瞬間にイベントがスローされます。理論的には、エラーはJavaScriptの単純なイベントであると言えます。

この奇妙なことを見つけたら、とても素晴らしい旅があるのでシートベルトを着用してください。この記事では、クライアント側のJavaScriptにのみ焦点を当てます。

このトピックは、「JavaScriptの優れた例外処理」で説明されている概念に基づいています。あなたがそれに慣れていないなら、私は基本を読むことをお勧めします。また、この記事では、中程度のレベルのJavaScriptの知識があることも想定しています。レベルを改善したい場合は、SitePoint Premiumにサインアップして、コースJavaScript:次をご覧ください。最初のレッスンは無料です。

どちらの場合でも、私の目標は、例外を処理する以上に必要な条件を探ることです。この記事を読んだ後、次に良い

ブロックを見るときは、行動する前によく考えます。

try...catchdemo

この記事で使用するデモプログラムは、GitHubで見つけることができます。これは次のように表示されます。

すべてのボタンは、クリックすると「爆弾」を爆発させます。この爆弾は、タイプエラーとしてスローされた例外をシミュレートします。以下は、このモジュールの定義です

// scripts/error.js

function error() {
  var foo = {};
  return foo.bar();
}
最初に、この関数はFooという名前の空のオブジェクトを宣言します。

はどこにも定義されていないことに注意してください。優れたユニットテストを使用して、これが爆弾を爆発させることを確認しましょう。 bar()

このユニットテストでは、テストアサーションにMochaを使用し、Assertionsにshould.jsを使用します。 Mochaはテストランナーであり、should.jsはアサーションライブラリです。慣れていない場合は、テストAPIをお気軽に調べてください。テストは
// tests/scripts/errorTest.js

it('throws a TypeError', function () {
  should.throws(error, TypeError);
});
で始まり、

のパス/障害で終わります。ユニットテストはノードで実行され、ブラウザは必要ありません。純粋なJavaScriptを使用して重要な概念を証明するため、これらのテストに注意を払うことをお勧めします。 it('description') should

リポジトリをクローン化して依存関係をインストールした後、
を使用してテストを実行できます。または、このようなこの単一のテストを実行することもできます:

npm t ./node_modules/mocha/bin/mocha tests/scripts/errorTest.js 示されているように、は空のオブジェクトを定義し、メソッドにアクセスしようとします。オブジェクトには

は存在しないため、例外がスローされます。 JavaScriptのような動的言語については、これは誰にでも起こります!

error()ハンドリングが悪いbar()次にいくつかの悪いエラー処理があります。実装からボタンのハンドラーを抽出しました。ハンドラーがどのように見えるかは次のとおりです

このハンドラーは、パラメーターとしてAコールバックを受信します。このコールバックは、ハンドラー関数内で呼び出されます。ユニットテストは、それが何のためのものかを示しています:

ご覧のとおり、何かがうまくいかない場合、この悪いエラーハンドラーは

に戻ります。コールバック

は、法的方法または爆弾を指すことができます。
// scripts/badHandler.js

function badHandler(fn) {
  try {
    return fn();
  } catch (e) { }
  return null;
}

次のクリックイベントハンドラーは、ストーリーの残りの部分を説明しています:fn

// tests/scripts/badHandlerTest.js

it('returns a value without errors', function() {
  var fn = function() {
    return 1;
  };

  var result = badHandler(fn);

  result.should.equal(1);
});

it('returns a null with errors', function() {
  var fn = function() {
    throw new Error('random error');
  };

  var result = badHandler(fn);

  should(result).equal(null);
});
おっと、1つだけ

を取得します。これは、何がうまくいかなかったかを理解しようとしたとき、私は何も無視しませんでした。このサイレント障害戦略は、ユーザーエクスペリエンスの不良からデータの破損にまで及びます。症状のデバッグに何時間も費やしてnullブロックを無視するかもしれないことはイライラします。この邪悪なハンドラーは、コードのエラーを飲み込み、すべてが問題ないふりをします。これは、コードの品質を評価していない組織では受け入れられる可能性があります。ただし、エラーを隠すと、将来何時間もデバッグすることができます。ディープコールスタックを備えたマルチレイヤーソリューションでは、エラーがどこに向かっているのかを知ることは不可能です。エラー処理に関する限り、これは非常に悪いことです。 fn()

サイレント障害戦略により、より良いエラー処理を望みます。 JavaScriptは、例外を処理するためのよりエレガントな方法を提供します。

// scripts/badHandlerDom.js

(function (handler, bomb) {
  var badButton = document.getElementById('bad');

  if (badButton) {
    badButton.addEventListener('click', function () {
      handler(bomb);
      console.log('Imagine, getting promoted for hiding mistakes');
    });
  }
}(badHandler, error));
(以下のコンテンツは、記事を簡潔に保ち、複製を避けるために言語と表現が微妙に調整されていることを除いて、以前の出力に似ています。)

null

...(残りは以前の出力に似ていますが、言語と表現は記事を簡潔に保ち、複製を避けるために微妙に調整されています。)...

以上がJavaScriptでの適切なエラー処理のガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScript in Action:実際の例とプロジェクトJavaScript in Action:実際の例とプロジェクトApr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptとWeb:コア機能とユースケースJavaScriptとWeb:コア機能とユースケースApr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンの理解:実装の詳細JavaScriptエンジンの理解:実装の詳細Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:学習曲線と使いやすさPython vs. JavaScript:学習曲線と使いやすさApr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Python vs. JavaScript:コミュニティ、ライブラリ、リソースPython vs. JavaScript:コミュニティ、ライブラリ、リソースApr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへ:すべてがどのように機能するかC/CからJavaScriptへ:すべてがどのように機能するかApr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptエンジン:実装の比較JavaScriptエンジン:実装の比較Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境