Zpracování chyb v jazyce JavaScript: SyntaxError: chybí ) za seznamem argumentů

Pokračujeme v našem seriálu o zpracování chyb v JavaScriptu a dnes se blíže podíváme na chybu Missing Parenthesis After Argument List. Chyba Missing Parenthesis After Argument List se může vyskytnout z různých důvodů, ale stejně jako většina chyb SyntaxErrors se běžně objevuje při překlepu, chybějícím operátoru nebo nesprávném escapování řetězce.

V tomto článku se budeme chybou Missing Parenthesis After Argument List zabývat trochu podrobněji, včetně toho, kam patří v hierarchii Exception jazyka JavaScript a co je příčinou vzniku takových chyb. Tak jdeme na to!

Technický přehled

  • Všechny chybové objekty JavaScriptu jsou potomky objektu Error nebo jsou jeho dědicem.
  • Objekt SyntaxError je dědicem objektu Error.
  • Chybový objekt Missing Parenthesis After Argument List je specifickým typem objektu SyntaxError.

Kdy byste jej měli použít?

Jak bylo uvedeno v úvodu, chybový objekt Missing Parenthesis After Argument List může vzniknout z různých důvodů. Většinou se problém týká překlepu nebo nějakého zapomenutého operátoru. Pro lepší ilustraci stačí prozkoumat několik jednoduchých příkladů:

Velmi typickou činností v jazyce JavaScript je concatenatespojení více řetězců do jednoho většího. To lze provést pomocí jednoduchého operátoru + mezi dvěma řetězci: console.log("Hello " + "world");

Nebo můžete řetězce spojovat také v řádku pomocí syntaxe zpětného křížku (`) a závorek ({}): console.log(`Hello ${worldVar}`);

Bez ohledu na způsob provedení přijímá mnoho metod jazyka JavaScript neurčitý počet argumentů (například řetězců), včetně metody console.log(). V následujícím příkladu si všimněte, co se stane, pokud zapomeneme zahrnout jakoukoli formu spojování našich dvou řetězců:

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

Výsledkem je, že okamžitě vyprodukujeme chybu Missing Parenthesis After Argument List:

Uncaught SyntaxError: missing ) after argument list

Jak si můžete všimnout, předali jsme metodě console.log() dva argumenty, ale neoddělili jsme je typickou čárkou (,), ani jsme naše dvě řetězcové hodnoty nespojili dohromady pomocí jedné z výše uvedených metod. To způsobí, že JavaScript náš kód zpracuje v pořádku, dokud nedojde na konec prvního řetězce (is:") a nepřejde na další argument (name). Protože jsme mu neřekli, aby spojoval, ani aby očekával další argument pomocí oddělovače čárky, JavaScript očekává, že je to konec našeho seznamu argumentů metody console.log(), a zjistí, že naše uzavírací závorka chybí ()), a vyhodí tedy chybu Missing Parenthesis After Argument List.

Řešení závisí na tom, jak chceme, aby se náš kód choval, ale v tomto případě, protože předáváme argumenty metodě console.log(), můžeme dosáhnout spojování přímo nebo prostým přidáním oddělovače čárky. Oddělovač čárkou je pro naše účely obecně čitelnější, takže zvolíme tuto možnost:

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

Tím získáme výstup našeho jména podle očekávání:

Name is: Jane Doe

Je to jistě poměrně jednoduchá oprava, ale to je problém chyby Missing Parenthesis After Argument List a SyntaxErrors obecně. Všechny jsou tak zřejmé, jakmile je objevíte, ale pokud váš editor kódu neprovádí parsování a vyhodnocování syntaktických chyb za běhu, často je snadno přehlédnete, dokud si kód sami nevyzkoušíte.

Stojí také za zmínku, že stejně jako ostatní SyntaxErrors nelze chybu Missing Parenthesis After Argument List snadno zachytit pomocí typického bloku try-catch. Protože se jedná o syntaktický problém, pokus o provedení problematického kódu v enginu JavaScript právě v tomto okamžiku selže. To obvykle znamená, že se nedostane do bodu provádění, kdy by mohl pokračovat k části bloku catch, protože neví, jak ji správně analyzovat. To lze obejít posunutím provádění přes různé soubory a vrstvy, ale pro všechny základní záměry a účely je catching SyntaxErrors velkým problémem.

Chcete-li se ponořit ještě hlouběji do pochopení toho, jak se vaše aplikace vypořádávají s chybami JavaScriptu, vyzkoušejte revoluční nástroj Airbrake pro sledování chyb JavaScriptu, který v reálném čase upozorňuje na chyby a poskytuje okamžitý přehled o tom, co se v kódu JavaScriptu pokazilo.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.