Im Rahmen unserer Serie über die Behandlung von JavaScript-Fehlern werden wir uns heute den JavaScript-Fehler Missing Parenthesis After Argument List
genauer ansehen. Der Missing Parenthesis After Argument List
-Fehler kann aus verschiedenen Gründen auftreten, aber wie die meisten SyntaxErrors
-Fehler taucht er häufig auf, wenn ein Tippfehler vorliegt, ein Operator fehlt oder eine Zeichenkette nicht richtig escaped wird.
In diesem Artikel werden wir den Missing Parenthesis After Argument List
-Fehler etwas genauer untersuchen, einschließlich der Frage, wo er in die JavaScript Exception
-Hierarchie passt und was solche Fehler verursacht. Los geht’s!
Der technische Überblick
- Alle JavaScript-Fehlerobjekte sind Nachkommen des
Error
-Objekts oder ein geerbtes Objekt davon. - Das
SyntaxError
-Objekt wird vomError
-Objekt geerbt. - Der
Missing Parenthesis After Argument List
-Fehler ist ein spezieller Typ desSyntaxError
-Objekts.
Wann sollten Sie es verwenden?
Wie in der Einleitung erwähnt, kann der Missing Parenthesis After Argument List
-Fehler aus einer Vielzahl von Gründen auftreten. Meistens handelt es sich um einen Tippfehler oder einen vergessenen Operator irgendeiner Art. Um dies besser zu veranschaulichen, können wir einige einfache Beispiele untersuchen.
Eine sehr typische Aktion in JavaScript ist das concatenate
Zusammenfügen mehrerer Zeichenketten zu einer größeren Zeichenkette. Dies kann mit einem einfachen +
-Operator zwischen zwei Zeichenketten durchgeführt werden: console.log("Hello " + "world");
Oder Sie können Strings auch inline verketten, indem Sie die Backtick- (`
) und Klammer-Syntax ({}
) verwenden: console.log(`Hello ${worldVar}`);
Ungeachtet dessen, wie es gemacht wird, akzeptieren viele JavaScript-Methoden eine unbestimmte Anzahl von Argumenten (z. B. Zeichenketten), einschließlich der Methode console.log()
. Im folgenden Beispiel sehen Sie, was passiert, wenn wir vergessen, unsere beiden Zeichenketten in irgendeiner Form zu verketten:
var printError = function(error, explicit) { console.log(` ${error.name}: ${error.message}`);}try { var name = "Jane Doe"; console.log("Name is:" name);} catch (e) { if (e instanceof SyntaxError) { printError(e, true); } else { printError(e, false); }}
Das Ergebnis ist, dass wir sofort einen Missing Parenthesis After Argument List
-Fehler erzeugen:
Uncaught SyntaxError: missing ) after argument list
Wie Sie vielleicht bemerken, haben wir zwei Argumente an console.log()
übergeben, aber wir haben sie weder durch ein typisches Komma (,
) getrennt, noch haben wir unsere beiden Zeichenkettenwerte mit einer der oben genannten Methoden miteinander verkettet. Dies führt dazu, dass JavaScript unseren Code problemlos parst, bis es das Ende der ersten Zeichenfolge (is:"
) erreicht und zum nächsten Argument (name
) übergeht. Da wir ihm weder gesagt haben, dass es verketten soll, noch dass es ein weiteres Argument durch die Verwendung eines Komma-Trennzeichens erwarten soll, erwartet JavaScript, dass dies das Ende unserer Argumentliste für die Methode console.log()
ist, und stellt fest, dass unsere schließende Klammer fehlt ()
), wodurch ein Missing Parenthesis After Argument List
-Fehler ausgelöst wird.
Die Lösung hängt davon ab, wie sich unser Code verhalten soll, aber in diesem Fall, da wir Argumente an console.log()
übergeben, können wir die Verkettung direkt erreichen oder indem wir einfach ein Komma-Trennzeichen hinzufügen. Das Komma-Trennzeichen ist für unsere Zwecke im Allgemeinen besser lesbar, also entscheiden wir uns für diese Option:
var printError = function(error, explicit) { console.log(` ${error.name}: ${error.message}`);}try { var name = "Jane Doe"; console.log("Name is:", name);} catch (e) { if (e instanceof SyntaxError) { printError(e, true); } else { printError(e, false); }}
Damit erhalten wir die erwartete Namensausgabe:
Name is: Jane Doe
Eine recht einfache Lösung, um sicher zu sein, aber das ist das Problem mit dem Missing Parenthesis After Argument List
-Fehler und mit SyntaxErrors
im Allgemeinen. Sie sind alle so offensichtlich, sobald sie entdeckt werden, aber wenn Ihr Code-Editor Ihren Code nicht analysiert und auf Syntaxfehler untersucht, ist es oft einfach, sie zu übersehen, bis Sie den Code selbst testen.
Es ist auch erwähnenswert, dass der Missing Parenthesis After Argument List
-Fehler, wie andere SyntaxErrors
, nicht einfach durch den typischen try-catch
-Block erfasst werden kann. Da es sich um ein Syntaxproblem handelt, schlägt der Versuch der JavaScript-Engine, den problematischen Code auszuführen, genau in diesem Moment fehl. Dies bedeutet in der Regel, dass sie nicht den Punkt in der Ausführung erreicht, an dem sie mit dem catch
-Teil des Blocks fortfahren kann, da sie nicht weiß, wie sie diesen korrekt parsen soll. Dies kann umgangen werden, indem man die Ausführung durch verschiedene Dateien und Ebenen verschiebt, aber für alle grundlegenden Zwecke ist catching
SyntaxErrors
eine große Herausforderung.
Um noch tiefer in das Verständnis einzutauchen, wie Ihre Anwendungen mit JavaScript-Fehlern umgehen, sollten Sie das revolutionäre Airbrake JavaScript-Fehlerverfolgungstool ausprobieren, das Echtzeitwarnungen und einen sofortigen Einblick in das gibt, was mit Ihrem JavaScript-Code schief gelaufen ist.