JavaScript-foutbehandeling: SyntaxError: missing ) after argument list

Ter voortzetting van onze serie JavaScript-fouten, kijken we vandaag naar de JavaScript-fout Missing Parenthesis After Argument List. De Missing Parenthesis After Argument List-fout kan om verschillende redenen optreden, maar net als de meeste SyntaxErrors komt hij vaak voor bij een typefout, een ontbrekende operator of een string die niet goed is ge-escaped.

In dit artikel gaan we wat dieper in op de Missing Parenthesis After Argument List-fout, inclusief waar deze in de JavaScript Exception-hiërarchie past, en waardoor dergelijke fouten optreden.

The Technical Rundown

  • Alle JavaScript-foutobjecten zijn afstammelingen van het Error-object, of een geërfd object daarvan.
  • Het SyntaxError-object is geërfd van het Error-object.
  • De Missing Parenthesis After Argument List-fout is een specifiek type SyntaxError-object.

Wanneer moet u het gebruiken?

Zoals vermeld in de inleiding, kan de Missing Parenthesis After Argument List-fout om een verscheidenheid van redenen optreden. Meestal heeft het probleem te maken met een typfout of een vergeten operator. Om dit beter te illustreren, kunnen we een paar eenvoudige voorbeelden bekijken.

Een zeer typische actie in JavaScript is om concatenate meerdere strings samen te voegen tot één grotere string. Dit kan worden uitgevoerd met behulp van een eenvoudige + operator tussen twee strings: console.log("Hello " + "world");

Of u kunt strings ook inline aaneenschakelen, met behulp van de backtick- (`) en haakjes ({}) syntaxis: console.log(`Hello ${worldVar}`);

Of hoe het ook wordt gedaan, veel JavaScript-methoden accepteren een onbepaald aantal argumenten (zoals strings), waaronder de methode console.log(). Merk in het onderstaande voorbeeld op wat er gebeurt als we vergeten een vorm van aaneenschakeling voor onze twee tekenreeksen op te nemen:

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

Het resultaat is dat we onmiddellijk een Missing Parenthesis After Argument List-fout produceren:

Uncaught SyntaxError: missing ) after argument list

Zoals u misschien hebt gemerkt, hebben we twee argumenten doorgegeven aan console.log(), maar we hebben ze niet gescheiden door een typische komma (,), noch hebben we onze twee tekenreeksen aan elkaar gekoppeld met een van de bovenstaande methoden. Dit zorgt ervoor dat JavaScript onze code prima parseert, totdat het het einde van de eerste string bereikt (is:") en verder gaat met het volgende argument (name). Omdat we het niet hebben verteld dat het moet aaneenschakelen, noch dat het een ander argument moet verwachten door het gebruik van een komma-scheidingsteken, verwacht JavaScript dat dit het einde is van onze argument-lijst voor de console.log() methode, en vindt dat ons sluitende haakje ontbreekt ()), waardoor het een Missing Parenthesis After Argument List foutmelding krijgt.

De oplossing hangt af van hoe we willen dat onze code zich gedraagt, maar in dit geval, omdat we argumenten doorgeven aan console.log(), kunnen we aaneenschakeling direct bereiken, of door simpelweg een komma-scheidingsteken toe te voegen. Het komma scheidingsteken is over het algemeen leesbaarder voor onze doeleinden, dus laten we voor die optie gaan:

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

Dit geeft ons onze naam uitvoer zoals verwacht:

Name is: Jane Doe

Een vrij eenvoudige oplossing, om zeker te zijn, maar dat is het probleem met de Missing Parenthesis After Argument List fout, en met SyntaxErrors in het algemeen. Ze zijn allemaal zo voor de hand liggend als ze eenmaal zijn ontdekt, maar tenzij uw code-editor uw code parseert en evalueert op syntaxisfouten, is het vaak gemakkelijk om ze te missen totdat u de code zelf test.

Het is ook de moeite waard op te merken dat, net als andere SyntaxErrors, de Missing Parenthesis After Argument List-fout niet gemakkelijk kan worden opgevangen door het typische try-catch-blok. Omdat het probleem syntaxis is, mislukt de poging van de JavaScript engine om de problematische code uit te voeren op dat exacte moment. Dit betekent meestal dat het niet het punt in uitvoering bereikt waar het verder kan gaan naar het catch gedeelte van het blok, omdat het niet weet hoe dat correct te parsen. Dit kan worden omzeild door de uitvoering te verplaatsen door verschillende bestanden en lagen, maar voor alle basisintenties en -doeleinden is catching SyntaxErrors een grote uitdaging.

Om nog dieper te duiken in het begrijpen van hoe uw applicaties omgaan met JavaScript-fouten, bekijk de revolutionaire Airbrake JavaScript-foutopsporingstool voor real-time waarschuwingen en direct inzicht in wat er mis is gegaan met uw JavaScript-code.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.