Heim  >  Artikel  >  Web-Frontend  >  Einführung in den JavaScript-Fehlerbehandlungsmechanismus (mit Beispielen)

Einführung in den JavaScript-Fehlerbehandlungsmechanismus (mit Beispielen)

不言
不言nach vorne
2018-10-19 15:29:431800Durchsuche

Dieser Artikel bietet Ihnen eine Einführung in den JavaScript-Fehlerbehandlungsmechanismus (mit Beispielen). Freunde in Not können darauf verweisen.

Manchmal werden in der von Ihnen gekapselten Tool-Funktion einige Fehler als Warnung ausgegeben, wenn keine Parameter übergeben werden oder das Framework nicht normal verwendet wird auch werfen Wenn etwas schief geht und Sie nichts über den Fehler wissen, können Sie ihn nicht debuggen. Basierend auf dem oben Gesagten ist es notwendig, den Fehlerbehandlungsmechanismus zu verstehen.

Das Folgende ist die Zusammenfassung des Autors. Wenn es Fehler gibt, weisen Sie bitte darauf hin.

Fehlerkonstruktor
Es gibt insgesamt 8 Fehlertypkonstruktoren in der JavaScript-Spezifikation
Error – Fehlerobjekt
SyntaxError – Syntaxfehler beim Parsen des Prozesses
TypeError – nicht gültig Typ
ReferenceError – Ungültige Referenz
RangeError – Der Wert überschreitet den gültigen Bereich
URIError – Fehler beim Parsen der URI-Kodierung
EvalError – Fehler beim Aufruf der Auswertungsfunktion
InternalError – Intern Fehler der Javascript-Engine Es werden Ausnahmen ausgelöst: „Zu viel Rekursion“

Zwei davon werden speziell erklärt:
EvalError ist ein Fehler beim Aufruf der Eval-Funktion und wurde aus Gründen der Abwärtskompatibilität veraltet weiterhin verwendet werden.
InternalError löst einen Fehler aus, wenn die Rekursion zu tief ist. Es handelt sich um eine nicht standardmäßige Methode und ist in der Produktionsumgebung deaktiviert.
Error ist die Basisklasse von Andere Typen erben die Error-Klasse und können mithilfe von Object.getPrototypeOf() ermittelt werden, ob eine Klasse eine andere Klasse erbt.

console.log(Object.getPrototypeOf(SyntaxError) === Error);    // true
console.log(Object.getPrototypeOf(TypeError) === Error);   // true
console.log(Object.getPrototypeOf(RangeError) === Error);   // true
console.log(Object.getPrototypeOf(URIError) ===  Error);   // true
console.log(Object.getPrototypeOf(EvalError) === Error);   // true
console.log(Object.getPrototypeOf(ReferenceError) === Error); // true

Lassen Sie uns über die Verwendung jedes Fehlertyps und die Fehlerszenarien sprechen.

Error

Ein Fehlerobjekt kann über den Error-Konstruktor erstellt werden. Wenn ein Laufzeitfehler auftritt, wird ein Fehlerinstanzobjekt ausgelöst.
Syntax: new Error([message])
Parameter:

message 可选,错误描述信息。
Fehler auslösen

Verwenden Sie die throw-Anweisung, um eine Ausnahme auszulösen
throw new Error('Was wird hier ausgelöst ist Fehlermeldung')
Nach der Ausführung wird die Ausgabe auf der Konsole gedruckt:
Uncaught Error: Die hier ausgegebene Fehlermeldung lautet
Hinweis: Nachdem Sie throw zum Auslösen einer Ausnahme verwendet haben, wird der nachfolgende Code nicht angezeigt mehr ausgeführt werden.

Fehler abfangen

Sie können diesen Fehler über die try{}catch(){}-Anweisung

try{
   throw new Error('这里抛出的是错误信息')
 }
 catch(err){
   alert(err.name + ' '+ err.message)
   }

Attributbeschreibung:


 当使用new Error创建错误实例后,会有两个属性:
abfangen let e = new Error('Was hier geworfen wird, ist die Fehlermeldung');

Namensattribut ist die Art des Fehlers, dieses Mal ist es Fehler
Nachrichtenattribut, das ist die Fehlermeldung, dieses Mal ist es so 'hier werfen' Die Fehlermeldung lautet '

SyntaxError

Syntaxfehler im Parsing-Prozess. Es werden viele Fehler von diesem Typ ausgegeben, bei denen es sich häufig um grammatikalische Fehler handelt, die beim Schreiben verursacht werden, zum Beispiel:

let n = 11;   // Uncaught SyntaxError: Invalid or unexpected token
let str = "hel"lo" // Uncaught SyntaxError: Unexpected identifier
let 123Var = 'hi' // Uncaught SyntaxError: Invalid or unexpected token

Es gibt viele Syntaxfehler, daher werde ich sie nicht einzeln auflisten. Bei der Ausführung im Browser gibt die Konsole einen Fehler aus und teilt Ihnen mit, um welche Zeile es sich handelt, sodass dies bequemer ist Verwenden Sie den Debugger. Sie müssen jedoch den Fehlertyp „SyntaxError“ und die folgende Fehlermeldung verstehen, damit Sie den Fehler problemlos beheben können.


TypeError

ist kein gültiger Typ. Diese Art von Fehler bedeutet, dass der angegebene Typ nicht der erforderliche Typ ist, was zur Funktionsunfähigkeit führt und einen Typfehler auslöst.
Die Variable oder der Parameter hat nicht den erwarteten Typ.
Die Variable oder der Parameter hat nicht den erwarteten Typ.
Zum Beispiel muss auf den Operator
new eine Funktion folgen, und Die angegebene Funktion ist keine Funktion, es wird ein Typfehler ausgegeben.

let fn = 'hello';
new fn;

Wirft einen Fehler aus:

Uncaught TypeError: fn ist kein Konstruktor
Aufruf einer Methode, die nicht existiert ein Objekt

let obj = {};
obj.fn()

Wirft einen Fehler aus:

Uncaught TypeError: obj.fn ist keine Funktion
Natürlich können Sie beim Kapseln der Funktion auch erzwingen, dass die eingehenden Parameter bestimmte Typen angeben , andernfalls wird ein Typfehler ausgegeben.

function flatten(arr){
if( !Array.isArray(arr) )
{
       throw new TypeError('传入参数不是数组')   
}    
}
flatten('test');

Wenn der eingehende Parameter kein Array ist, wird ein benutzerdefinierter Typfehler ausgegeben:

Uncaught TypeError: Der eingehende Parameter ist kein Array

ReferenceError

Ungültige Referenz.

Referenziert eine Variable, die nicht existiert


console.log(a);

Wirft einen Fehler aus

Uncaught ReferenceError: a ist nicht definiert
Weist eine Variable Daten zu, die nicht zugewiesen werden können
Dieser Fehler wird häufig gemacht, wenn in der if-Anweisung nach dem Aufruf einer Methode der Vergleichsoperator == geschrieben wird, um beispielsweise zu beurteilen, ob das erste Zeichen einer Zeichenfolge das angegebene Zeichen ist.

let str = 'hello';
if( str.charAt(0) = 'h' ){
   console.log('第一个字符为h');
   }

Wirft einen Fehler aus:

Uncaught ReferenceError: Ungültige linke Seite in der Zuweisung
RangeError
Der Wert liegt außerhalb des gültigen Bereichs. Bei einigen Methoden muss der übergebene Wert innerhalb eines bestimmten Bereichs liegen, andernfalls wird ein Fehler außerhalb des Bereichs ausgegeben.
Die beim Erstellen des Arrays übergebene Länge ist kleiner als 0

let arr = new Array(-1)

Wirft einen Fehler aus:

Uncaught RangeError: Invalid array length
Die Anzahl der Wiederholungen der durch angegebene Zeichenfolge Die Wiederholungsmethode ist kleiner als 0

let str = 'hello';
str.repeat(-1)

Wirft einen Fehler aus:

Uncaught RangeError: Uncaught RangeError: Invalid count value

URIError

Fehler bei der Verarbeitung der URI-Codierung. Die Funktionsparameter sind falsch, hauptsächlich die sechs Funktionen encodeURI(), decodeURI(), encodeURIComponent(), decodeURIComponent(), escape() und unescape().
Zum Beispiel:

decodeURIComponent('%');
decodeURI('%2')

Wirft einen Fehler aus:

Uncaught URIError: URI malformed

Benutzerdefinierter Fehlertyp

Manchmal möchten Sie den Fehler anpassen type , müssen Sie einen Konstruktor anpassen und dann den Prototyp Error.prototype erben lassen.

function MyErrorType(message){
this.message = message || '错误';
this.name = 'MyErrorType';
this.stack = (new Error()).stack;  // 错误位置和调用栈
}
MyErrorType.prototype = Object.create(Error.prototype);
MyErrorType.prototype.constructor = MyErrorType;
throw new MyErrorType('自定义错误类型抛出错误')

关于调用的错误栈信息
提供的错误的跟踪功能,以什么样的调用顺序,在哪个文件的哪一行捕获到这个错误。
例如以下调用:

 function trace() {
  try {
        throw new Error('myError');
  }
  catch(e) {
        console.log(e.stack);
  }
  }
function b() {
trace();
}
function a() {
b(3, 4, '\n\n', undefined, {});
}
a('first call, firstarg');

错误信息为:
Error: myError
  at trace (0c3d1a8a9fac89c933e63fe9a97ef2f1:3:14)
  at b (0c3d1a8a9fac89c933e63fe9a97ef2f1:10:6)
  at a (0c3d1a8a9fac89c933e63fe9a97ef2f1:13:6)
  at 0c3d1a8a9fac89c933e63fe9a97ef2f1:15:4
以上为抛错的构造函数的总结,如有误之处欢迎扶正。

Das obige ist der detaillierte Inhalt vonEinführung in den JavaScript-Fehlerbehandlungsmechanismus (mit Beispielen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen