ホームページ >ウェブフロントエンド >jsチュートリアル >jsのtry...catch構文構造は何に役立ちますか?試してみてください...詳しい説明をご覧ください

jsのtry...catch構文構造は何に役立ちますか?試してみてください...詳しい説明をご覧ください

青灯夜游
青灯夜游オリジナル
2018-11-08 18:01:237530ブラウズ

この記事でわかることは、js try...catch 構文構造はどのような用途に使われるのかということです。 Try...Catchの詳細な説明。困っている友人は参考にしていただければ幸いです。

1. try...catch の基本構文

try..catch 構造には主に 2 つのブロックがあります。 } および catch(err){}:

try{
   //在这里运行代码
   //抛出错误
}
catch(err){
   //在这里处理错误
}

動作原理は次のとおりです:

1 まず、コード try {... を実行します。 }。

2. エラーがない場合は、catch(err){....} を無視して、try {...} を実行した後、catch(err){....} をスキップして直接実行します。次の発言。

3. エラーが発生した場合は、try の実行を停止し、catch(err){...} の実行を開始します。 err 変数 (任意に定義可能) には、何が起こったかを詳細に示すエラー オブジェクトが含まれます。

2. エラー オブジェクト

エラーが発生すると、JavaScript はその詳細情報を含むオブジェクトを生成します。次に、このオブジェクトはパラメータとして catch に渡されます。例:

try {
  // ...
} catch(err) { // <-- "错误对象",“err”可以用可以用任意词代替
  // ...
}

すべての組み込みエラーの場合、catch ブロック内のエラー オブジェクトには 2 つの主要なプロパティがあります:

name

エラー名、未定義変数の「参照エラー」。

メッセージ

エラーの詳細を含むテキスト メッセージ。

ほとんどの環境には、その他の非標準プロパティがあります。最も広く使用されサポートされているものは次のとおりです。

stack

現在のコール スタック: エラーの原因となったネストされた一連の呼び出しに関する情報を含む文字列 (目的)これはデバッグ用です)。

例:

try {
  lalala; // 错误,变量未定义!
} catch(err) {
  alert(err.name); // 引用错误
  alert(err.message); // Lalala变量没有定义
  alert(err.stack); //引用错误:Lalala变量没有定义在…
  
  // 也可以作为整体显示错误
  // “name: message”:可以将错误转换为字符串
  alert(err); // ReferenceError: lalala is not defined
}

3. 「try...catch」を使用します。

実際の使用法を見てみましょう。ケーストライキャッチ。

html コード:

<p>请输出一个 5 到 10 之间的数字:</p>
<input id="demo" type="text">
<button type="button" onclick="myFunction()">测试输入</button>
<p id="mess"></p>

js コード:

function myFunction() {
	try {
		var x = document.getElementById("demo").value;
		//取元素的值

		if(x == "") throw "值为空";
		//根据获取的值, 抛出错误
		if(isNaN(x)) throw "不是数字";
		if(x > 10) throw "太大";
		if(x < 5) throw "太小";
	} catch(err) {
		var y = document.getElementById("mess");
		//抓住上面throw抛出的错误, 给p标签显示
		y.innerHTML = "错误:" + err + "。";
	}
}

操作後のレンダリング:

jsのtry...catch構文構造は何に役立ちますか?試してみてください...詳しい説明をご覧くださいjsのtry...catch構文構造は何に役立ちますか?試してみてください...詳しい説明をご覧ください

4. try...catch...finally

try...catch 構造には、finally というコード句もあります。

それが存在する場合は、すべての場合に実行されます:

1. try の後、エラーがなければ、

2.その後、エラーが発生した場合は、

拡張構文は次のようになります:

try {
   ... 尝试执行代码 ...
} catch(e) {
   ... 处理错误 ...
} finally {
   ... 始终执行 ...
}

このコードを実行してみてください:

try {
  alert( &#39;try&#39; );
  if (confirm(&#39;犯错误了?&#39;)) BAD_CODE();
} catch (e) {
  alert( &#39;catch&#39; );
} finally {
  alert( &#39;finally&#39; );
}

コードは次のようになります。

「間違えましたか?」に「はい (OK)」と答えた場合は、最後に try -> catch -> を実行します。

「いいえ (キャンセル)」という場合は、最後に -> を試してください。

finally は、try..catch の前に何かを開始し、結果が得られずに完了したい場合に、この句を使用する必要があることを示します。

たとえば、フィボナッチ数関数にかかる時間 fib(n) を測定したいとします。もちろん、実行前に測定を開始し、後で測定を完了することもできます。しかし、関数呼び出し中にエラーが発生した場合はどうなるでしょうか?特に、以下のコードの fib(n) の実装は、負の数または非整数の場合にエラーを返します。

最後に いずれにしても、この節は測定を行うのに適した場所です。

ここで、どちらの場合でも時間が正しく測定されることが最終的に保証されます - fib が正常に実行されてエラーが発生した場合:

let num = +prompt("输入正整数?", 35)

let diff, result;

function fib(n) {
	if(n < 0 || Math.trunc(n) != n) {
		throw new Error("不能是负的,且必须是整数。");
	}
	return n <= 1 ? n : fib(n - 1) + fib(n - 2);
}

let start = Date.now();

try {
	result = fib(num);
} catch(e) {
	result = 0;
} finally {
	diff = Date.now() - start;
}

alert(result || "发生错误");

alert(`执行时间 ${diff}ms`);

35 を入力した場合:

jsのtry...catch構文構造は何に役立ちますか?試してみてください...詳しい説明をご覧くださいjsのtry...catch構文構造は何に役立ちますか?試してみてください...詳しい説明をご覧くださいjsのtry...catch構文構造は何に役立ちますか?試してみてください...詳しい説明をご覧ください

-1 を入力すると:

jsのtry...catch構文構造は何に役立ちますか?試してみてください...詳しい説明をご覧くださいjsのtry...catch構文構造は何に役立ちますか?試してみてください...詳しい説明をご覧くださいjsのtry...catch構文構造は何に役立ちますか?試してみてください...詳しい説明をご覧ください

両方の測定が正しく完了します。

概要: 上記がこの記事の全内容です。これが皆さんの学習に役立つことを願っています: JavaScript チュートリアル !

以上がjsのtry...catch構文構造は何に役立ちますか?試してみてください...詳しい説明をご覧くださいの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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