Heim  >  Artikel  >  Web-Frontend  >  Was nützt die js try...catch-Syntaxstruktur? Versuchen Sie es ... finden Sie eine detaillierte Erklärung

Was nützt die js try...catch-Syntaxstruktur? Versuchen Sie es ... finden Sie eine detaillierte Erklärung

青灯夜游
青灯夜游Original
2018-11-08 18:01:237441Durchsuche

Der Inhalt dieses Artikels befasst sich mit der Syntaxstruktur von js try...catch. Ausführliche Erklärung von try...catch. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.

1. Die grundlegende Syntax von try...catch

Die try..catch-Struktur besteht hauptsächlich aus zwei Blöcken: try { } und Catch(err){}:

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

Das Funktionsprinzip ist wie folgt:

Führen Sie zunächst den Code try {. aus. .}.

2. Wenn kein Fehler vorliegt, ignorieren Sie Catch(err){....}. Nach der Ausführung von try {...} überspringen Sie Catch(err){....} und führen Sie ihn direkt aus. Nächste Aussage.

3. Wenn ein Fehler auftritt, stoppt try die Ausführung und beginnt mit der Ausführung von „catch(err){...}“. Die Variable err (die beliebig definiert werden kann) enthält ein Fehlerobjekt, das detailliert beschreibt, was passiert ist.

2. Fehlerobjekt

Wenn ein Fehler auftritt, generiert JavaScript ein Objekt mit detaillierten Informationen darüber. Dieses Objekt wird dann als Parameter an Catch übergeben, zum Beispiel:

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

Für alle integrierten Fehler hat das Fehlerobjekt im Catch-Block zwei Haupteigenschaften:

Name

Fehlername, „Referenzfehler“ für eine undefinierte Variable.

Nachricht

Textnachricht mit Fehlerdetails.

In den meisten Umgebungen gibt es andere nicht standardmäßige Eigenschaften. Der am weitesten verbreitete und unterstützte ist:

Stack

Aktueller Aufrufstack: eine Zeichenfolge mit Informationen über die verschachtelte Aufrufsequenz, die den Fehler verursacht hat (der Zweck ist für Debuggen).

Zum Beispiel:

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. Verwenden Sie „try...catch“

Lassen Sie uns eine echte Verwendung erkunden Fall versuchen..fangen.

HTML-Code:

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

JS-Code:

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 + "。";
	}
}

Rendering nach dem Vorgang:

Was nützt die js try...catch-Syntaxstruktur? Versuchen Sie es ... finden Sie eine detaillierte ErklärungWas nützt die js try...catch-Syntaxstruktur? Versuchen Sie es ... finden Sie eine detaillierte Erklärung

4. try...catch...finally

Das try...catch-Konstrukt hat auch eine Codeklausel: Finally.

Wenn es vorhanden ist, wird es in allen Fällen ausgeführt:

1 Nach dem Versuch, wenn kein Fehler vorliegt,

2 Wenn danach ein Fehler auftritt

Die erweiterte Syntax sieht folgendermaßen aus:

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

Versuchen Sie, diesen Code auszuführen:

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

Der Code kann sein auf zwei Arten ausgeführt:

Wenn Sie auf „Einen Fehler gemacht?“ mit „Ja (OK)“ antworten, dann führen Sie „try“ aus –>

Wenn Sie „Nein (Abbrechen)“ sagen, dann versuchen Sie es ->

zeigt schließlich an, dass wir diese Klausel verwenden müssen, wenn wir vor try..catch mit einer Aktion beginnen und sie ohne Ergebnis abschließen möchten.

Zum Beispiel wollen wir die Zeit messen, die die Fibonacci-Zahlenfunktion fib(n) benötigt. Selbstverständlich können wir die Messung vor der Ausführung starten und anschließend abschließen. Was aber, wenn beim Funktionsaufruf ein Fehler auftritt? Insbesondere die Implementierung von fib(n) im folgenden Code gibt einen Fehler für eine negative oder nicht ganzzahlige Zahl zurück.

Abschließend ist diese Klausel, egal was passiert, ein guter Ort, um Ihre Messungen durchzuführen.

Hier ist endlich gewährleistet, dass die Zeit in beiden Fällen korrekt gemessen wird – wenn fib erfolgreich ausgeführt wird und ein Fehler auftritt:

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`);

wenn wir 35 eingeben:

Was nützt die js try...catch-Syntaxstruktur? Versuchen Sie es ... finden Sie eine detaillierte ErklärungWas nützt die js try...catch-Syntaxstruktur? Versuchen Sie es ... finden Sie eine detaillierte ErklärungWas nützt die js try...catch-Syntaxstruktur? Versuchen Sie es ... finden Sie eine detaillierte Erklärung

Wenn wir -1 eingeben:

Was nützt die js try...catch-Syntaxstruktur? Versuchen Sie es ... finden Sie eine detaillierte ErklärungWas nützt die js try...catch-Syntaxstruktur? Versuchen Sie es ... finden Sie eine detaillierte ErklärungWas nützt die js try...catch-Syntaxstruktur? Versuchen Sie es ... finden Sie eine detaillierte Erklärung

Beide Messungen werden korrekt durchgeführt.

Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Lernen aller hilfreich ist: JavaScript-Tutorial!

Das obige ist der detaillierte Inhalt vonWas nützt die js try...catch-Syntaxstruktur? Versuchen Sie es ... finden Sie eine detaillierte Erklärung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn