JavaScript-virheiden käsittely:

. Missing Parenthesis After Argument List-virhe voi esiintyä monista eri syistä, mutta kuten useimmat SyntaxErrors-virheet, se tulee yleensä esiin, kun on kirjoitusvirhe, operaattori puuttuu tai merkkijonoa ei ole eskapoitu kunnolla.

Tässä artikkelissa tarkastelemme Missing Parenthesis After Argument List-virhettä hiukan yksityiskohtaisemmin, mukaan lukien sitä, mihin se sijoittuu JavaScriptin Exception-hierarkiassa ja mistä tällaisten virheiden syntyminen johtuu. Away we go!

Tekninen katsaus

  • Kaikki JavaScript-virheobjektit ovat Error-objektin jälkeläisiä tai sen periytyviä objekteja.
  • Objekti SyntaxError on periytynyt Error-objektista.
  • Virhe Missing Parenthesis After Argument List on erityyppinen SyntaxError-objekti.

Milloin sitä pitäisi käyttää?

Kuten johdannossa mainittiin, Missing Parenthesis After Argument List-virhe voi esiintyä monista eri syistä. Useimmiten ongelma liittyy kirjoitusvirheeseen tai jonkinlaiseen unohtuneeseen operaattoriin. Tämän havainnollistamiseksi paremmin voimme tutkia vain muutamia yksinkertaisia esimerkkejä.

Erittäin tyypillinen toiminto JavaScriptissä on concatenate useiden merkkijonojen concatenate yhdistäminen yhdeksi suuremmaksi merkkijonoksi. Tämä voidaan tehdä käyttämällä yksinkertaista +-operaattoria kahden merkkijonon välillä: console.log("Hello " + "world");

Tai voit myös ketjuttaa merkkijonoja inline käyttäen backtick- (`) ja sulkujen ({}) syntaksia: console.log(`Hello ${worldVar}`);

Tekotavasta riippumatta monet JavaScript-metodit hyväksyvät rajoittamattoman määrän argumentteja (kuten merkkijonoja), myös console.log()-metodi. Alla olevassa esimerkissä huomaa, mitä tapahtuu, jos unohdamme sisällyttää kahden merkkijonomme yhteenkytkennän mihinkään muotoon:

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

Tuloksena on, että tuotamme välittömästi Missing Parenthesis After Argument List-virheen:

Uncaught SyntaxError: missing ) after argument list

Kuten huomaat, annoimme kaksi argumenttia console.log():lle, mutta emme erottaneet niitä toisistaan tyypillisellä pilkulla (,) emmekä myöskään ketjuttaneet kahta merkkijonoarvoamme yhteen jollakin edellä mainituista metodeista. Tämä aiheuttaa sen, että JavaScript jäsentää koodimme hienosti, kunnes se saavuttaa ensimmäisen merkkijonon lopun (is:") ja siirtyy seuraavaan argumenttiin (name). Koska emme käskeneet sitä ketjuttamaan, emmekä odottamaan toista argumenttia pilkkuerottimella, JavaScript odottaa, että tämä on console.log()-metodin argumenttiluettelon loppu, ja huomaa, että sulkeva sulku puuttuu ()), mikä aiheuttaa Missing Parenthesis After Argument List-virheen.

Ratkaisu riippuu siitä, miten haluamme koodimme käyttäytyvän, mutta tässä tapauksessa, koska välitämme argumentteja console.log()-menetelmää varten, voimme saada aikaan ketjuttamisen joko suoraan tai lisäämällä pelkän pilkkuerottimen. Pilkkuerotin on yleensä luettavampi tarkoituksiamme varten, joten valitsemme sen vaihtoehdon:

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ällöin saamme odotetun nimitulosteen:

Name is: Jane Doe

Todennäköisesti melko yksinkertainen korjaus, mutta tämä on ongelma Missing Parenthesis After Argument List-virheessä ja SyntaxErrors-virheessä yleensä. Ne ovat kaikki niin ilmiselviä, kun ne on kerran havaittu, mutta ellei koodieditori analysoi ja arvioi koodia syntaksivirheiden varalta lennossa, ne jäävät usein helposti huomaamatta, ennen kuin testaat koodia itse.

On myös syytä huomata, että kuten muitakin SyntaxErrors-virheitä, myös Missing Parenthesis After Argument List-virhettä ei voi helposti vangita tyypillisellä try-catch-lohkolla. Koska ongelma on syntaksi, JavaScript-moottorin yritys suorittaa ongelmallinen koodi epäonnistuu juuri sillä hetkellä. Tämä tarkoittaa yleensä sitä, että se ei saavuta suorituksessa kohtaa, jossa se voi jatkaa lohkon catch-osaan, koska se ei osaa jäsentää sitä oikein. Tämä voidaan kiertää siirtämällä suoritusta eri tiedostojen ja tasojen kautta, mutta perusasioissa catching SyntaxErrors on suuri haaste.

Jos haluat sukeltaa vielä syvemmälle sen ymmärtämiseen, miten sovelluksesi käsittelevät JavaScript-virheitä, tutustu vallankumoukselliseen Airbrake JavaScript-virheiden seurantatyökaluun, jolla saat reaaliaikaisia hälytyksiä ja välitöntä tietoa siitä, mikä JavaScript-koodissasi meni pieleen.

Vastaa

Sähköpostiosoitettasi ei julkaista.