目次
例外をスローする
如何处理未捕获的异常
ホームページ ウェブフロントエンド jsチュートリアル JavaScript の例外処理メソッドを一緒に分析しましょう

JavaScript の例外処理メソッドを一緒に分析しましょう

Aug 04, 2022 pm 04:27 PM
javascript

この記事では、JavaScript に関する関連知識を提供します。主に例外処理に関連する問題を紹介します。プログラムを作成する過程で、いくつかのエラーは避けられません。これらのエラーを通じて、エラーの発生を回避する方法を学ぶことができます。見てみましょう。この状況でどうすればよいのか、次回はどうすれば改善できるのか、皆さんのお役に立てれば幸いです。

JavaScript の例外処理メソッドを一緒に分析しましょう

[関連する推奨事項: JavaScript ビデオ チュートリアル Web フロントエンド ]

エラーは、プログラミングプロセス。プログラムを作成する過程では必ずエラーが発生しますが、そのエラーを通じて、そのような状況を回避する方法や、次回より良くする方法を学ぶことができます。

JavaScript では、コード ステートメントが緊密に結合されてエラーが発生した場合、残りのコード ステートメントを使用し続けることは意味がありません。その代わりに、私たちは間違いからできるだけ丁寧に回復しようとします。このようなエラーが発生すると、JavaScript インタプリタは例外処理コードをチェックし、例外ハンドラがない場合、プログラムはエラーの原因となった関数に戻ります。

例外ハンドラーが見つかるか、最上位関数に到達するまで、コール スタック上のすべての関数に対してこれを繰り返します。これにより、プログラムがエラーで終了し、プログラムがクラッシュします。

一般的に、これを処理するには 2 つの方法があります:

  • 例外をスローする- 実行時に発生した場合問題を意味のある方法で処理することはできません。問題をスローすることをお勧めします。

function openFile(fileName) {
  if (!exists(fileName)) {
    throw new Error('找不到文件 ' + fileName)
  }
  // ...
}
ログイン後にコピー
  • 例外のキャッチ#スローされた例外は、実行時に発生する可能性が高くなります。意味が捉えられ、処理される場所

try {
  openFile('../test.js')
} catch(e) {
  // 优雅地处理抛出的期望
}
ログイン後にコピー

これらの操作をさらに詳しく理解しましょう。

例外をスローする

「ReferenceError: spec is not found」のようなメッセージが表示される場合があります。これは、throw ステートメントによってスローされた例外を表します。

構文

throw «value»
// 不要这样做
if (somethingBadHappened) {
  throw 'Something bad happened'
}
ログイン後にコピー

例外としてスローできるデータ型に制限はありませんが、JavaScript には特別な組み込み例外タイプがあります。前の例で見たように、そのうちの 1 つはエラーです。これらの組み込み例外タイプは、例外メッセージよりも詳細な情報を提供します。

#Error

#Error タイプは、一般的な例外を表すために使用されます。このタイプの例外は、ユーザー定義の例外を実装するために最も一般的に使用されます。利用可能な 2 つの組み込みプロパティがあります。

  • message — Error コンストラクターにパラメーターとして渡されるコンテンツ。たとえば、new Error('これはエラー メッセージです') です。メッセージ プロパティを通じてメッセージにアクセスできます。

  • const myError = new Error('Error!!!')
    console.log(myError.message) // Error!!!
    ログイン後にコピー
  • stack — このプロパティは、エラーの原因となったファイルの履歴 (呼び出しスタック) を返します。スタックの最上位にはメッセージも含まれており、その後に、最新/分離されたエラー ポイントから最も外側の原因ファイルまでの実際のスタックが続きます。

  • Error: Error!!!
        at <anonymous>:1:1
    ログイン後にコピー
注: new Error('...') はスローする前に操作を実行しません。つまり、 throw new Error('error msg') は Error インスタンスを作成して停止します。 Error エラーを捕捉するなど、Error エラーに対して何らかの操作を行わない限り、スクリプトは実行されません。

例外のキャッチ

例外の概要と例外のスロー方法がわかったので、次は例外をキャッチしてプログラムの破壊を防ぐ方法について説明します。

try-catch-finally は、例外を処理する最も簡単な方法です。

try {
  // 要运行的代码
} catch (e) {
  // 发生异常时要运行的代码
}
  
[ // 可选
  finally {
    // 无论发生异常都始终执行的代码
  }
]
ログイン後にコピー

try 句に、例外を生成する可能性のあるコードを追加します。例外が発生すると、catch 句が実行されます。

コードが例外を生成するかどうかに関係なく、コードを実行する必要がある場合があります。この場合、オプションのfinallyブロックを使用できます。

try 句または catch 句が return ステートメントを実行する場合でも、finally ブロックは実行されます。たとえば、次の関数は、finally 句が最後に実行されるため、「Executefinally」を返します。

function foo() {
  try {
    return true
  } finally {
    console.log(&#39;Execute finally&#39;)
  }
}
ログイン後にコピー

コードの正確性を事前に確認できない場合は、try-catch を使用します。

const user = &#39;{"name": "D.O", "age": 18}&#39;
try {
  // 代码运行
  JSON.parse(params)
  // 在出现错误的情况下,其余的代码将永远无法运行
  console.log(params)
} catch (err) {
  // 在异常情况下运行的代码
  console.log(err.message) // params is not defined
}
ログイン後にコピー

上で示したように、コードを実行する前に JSON.parse で stringify オブジェクトまたは文字列をチェックすることはできません。

注: プログラムで生成された例外と実行時例外はキャッチできますが、JavaScript 構文エラーはキャッチできません。

try-catch-finally は同期エラーのみをキャッチできます。これを非同期コードで使用しようとすると、非同期コードの実行が完了する前に try-catch-finally が実行されてしまう可能性があります。

非同期コード ブロックで例外を処理する方法

コールバック関数

コールバック関数を使用します (推奨されません)。以下に示すように、2 つのパラメーターを受け取ります:

async function(code, (err, result) => {
  if (err) return console.error(err)
  console.log(result)
})
ログイン後にコピー

2 つのパラメーターがあることがわかります: err と result。エラーが発生した場合、err パラメータはエラーと等しくなり、例外処理のためにスローできます。

在 if (err) 块中返回某些内容或将其他指令包装在 else 块中都很重要。否则,您可能会遇到另一个错误。例如,当您尝试访问 result.data 时,result 可能未定义。

Promises

使用 promises 的 then 或者 catch,我们可以通过将错误处理程序传递给 then 方法或使用 catch 子句来处理错误。

promise.then(onFulfilled, onRejected)
ログイン後にコピー

也可以使用 .catch(onRejected) 而不是 .then(null, onRejected) 添加错误处理程序,其工作方式相同。

让我们看一个 .catch 拒绝 Promise 的例子。

Promise.resolve(&#39;1&#39;)
  .then(res => {
    console.log(res) // 1
    throw new Error(&#39;go wrong&#39;) // 抛出异常
})
.then(res => {
  console.log(res) // 不会被执行
})
.catch(err => { 
  console.error(err) // 捕获并处理异常 ——> Error: go wrong
})
ログイン後にコピー

使用 async/await 和 try-catch

使用 async/await 和 try-catch-finally,处理异常是轻而易举的事。

async function func() {
  try {
    await nonExistentFunction()
  } catch (err) {
    console.error(err) // ReferenceError: nonExistentFunction is not defined 
  }
}
ログイン後にコピー

如何处理未捕获的异常

现在我们已经很好地理解了如何在同步和异步代码块中执行异常处理,让我们回答本文最后一个待解决的问题 :我们如何处理未捕获的异常?

在浏览器中

我们可以使用 window.onerror() 方法来处理未捕获的异常。每当运行时发生错误时,该方法会在 window 对象上触发 error 事件。

onerror() 的另一个实用做法是:当站点中的图片或视频等数据加载出错时,可以用该方法触发某些操作。例如,提供一张加载出错时的图片,或显示一条消息。

<img src="logo.png" onerror="alert(&#39;Error loading picture.&#39;)" />
ログイン後にコピー

在 Node.js 中

EventEmitter 模块派生的 process 对象可以订阅事件 uncaughtException。

process.on(&#39;uncaughtException&#39;, () => {})`
ログイン後にコピー

我们可以传递一个回调来处理异常。如果我们尝试捕获这个未捕获的异常,进程将不会终止,因此我们必须手动完成。

uncaughtException 仅适用于同步代码。对于异步代码,还有另一个称为 unhandledRejection 的事件。

process.on(&#39;unhandledRejection&#39;, () => {})
ログイン後にコピー

决不要尝试为基本 Error 类型实现 “捕获所有” 处理程序。这将混淆所发生的一切,并损害代码的可维护性和可扩展性。

关键要点

throw 语句用于生成用户定义的异常。在运行时,当 throw 遇到语句时,当前函数的执行将停止,控制权将传递给 catch 调用堆栈中的第一个子句。如果没有 catch 子句,程序将终止

JavaScript 有一些内置的异常类型,最值得注意的是 Error,它返回 Error 中的两个重要属性:stack 和 message。

try 子句将包含可能产生异常的代码,catch 子句会在发生异常时执行。

对于异步代码,最好使用 async/await 配合 try-catch 语句。

可以捕获未处理的异常,这可以防止应用程序崩溃。

不要觉得麻烦,异常处理可以帮助您提高代码的可维护性、可扩展性和可读性。

【相关推荐:javascript视频教程web前端

以上がJavaScript の例外処理メソッドを一緒に分析しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

JavaScriptでinsertBeforeを使用する方法 JavaScriptでinsertBeforeを使用する方法 Nov 24, 2023 am 11:56 AM

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

JavaScript と WebSocket: 効率的なリアルタイム画像処理システムの構築 JavaScript と WebSocket: 効率的なリアルタイム画像処理システムの構築 Dec 17, 2023 am 08:41 AM

JavaScript は Web 開発で広く使用されているプログラミング言語であり、WebSocket はリアルタイム通信に使用されるネットワーク プロトコルです。 2 つの強力な機能を組み合わせることで、効率的なリアルタイム画像処理システムを構築できます。この記事では、JavaScript と WebSocket を使用してこのシステムを実装する方法と、具体的なコード例を紹介します。まず、リアルタイム画像処理システムの要件と目標を明確にする必要があります。リアルタイムの画像データを収集できるカメラ デバイスがあるとします。

See all articles