Tratamento de Erros JavaScript: SyntaxError: missing ) após a lista de argumentos

Continuando através da nossa série JavaScript Error Handling, hoje vamos olhar de perto para o Missing Parenthesis After Argument List JavaScript error. O erro Missing Parenthesis After Argument List pode ocorrer por uma variedade de razões, mas como a maioria SyntaxErrors, ele normalmente aparece quando há um erro de digitação, um operador está faltando, ou uma string não está escapando corretamente.

Neste artigo vamos examinar o erro Missing Parenthesis After Argument List com um pouco mais de detalhe, incluindo onde ele se encaixa na hierarquia JavaScript Exception, e o que causa a ocorrência de tais erros. De longe vamos!

O Rundown Técnico

  • Todos os objectos de erro JavaScript são descendentes do objecto Error, ou um objecto herdado do mesmo.
  • O objecto SyntaxError é herdado do objecto Error.
  • O Missing Parenthesis After Argument List erro é um tipo específico de SyntaxError objeto.

Quando você deve usá-lo?

Como mencionado na introdução, o erro Missing Parenthesis After Argument List pode ocorrer por uma variedade de razões. Na maioria das vezes, a questão diz respeito a um erro de digitação ou a um operador esquecido de algum tipo. Para melhor ilustrar isto, podemos apenas explorar alguns exemplos simples.

Uma ação muito típica no JavaScript é concatenate várias cordas juntas para formar uma cadeia maior. Isto pode ser feito usando um simples operador + entre duas cadeias de caracteres: console.log("Hello " + "world");

Or, você também pode concatenar as cordas em linha, usando a sintaxe de backtick (`) e colchete ({}): console.log(`Hello ${worldVar}`);

Independentemente de como é feito, muitos métodos JavaScript aceitam um número indefinido de argumentos (tais como strings), incluindo o método console.log(). No exemplo abaixo, observe o que acontece se esquecermos de incluir qualquer forma de concatenação para nossas duas strings:

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

O resultado é que imediatamente produzimos um erro:

Uncaught SyntaxError: missing ) after argument list

Como você pode notar, passamos dois argumentos para console.log(), mas não os separamos por uma vírgula típica (,), nem concatenamos nossos dois valores de string junto com um dos métodos acima. Isto faz com que o JavaScript parse nosso código muito bem, até chegar ao fim da primeira string (is:") e passa para o próximo argumento (name). Como não o dissemos para concatenar, nem para esperar outro argumento através do uso de um separador de vírgulas, o JavaScript espera que seja o fim da nossa lista de argumentos para o método console.log(), e descobre que falta o nosso parêntese final ()), lançando assim um erro Missing Parenthesis After Argument List.

A solução depende de como queremos que o nosso código se comporte, mas neste caso, porque estamos a passar argumentos para console.log(), podemos conseguir a concatenação directamente, ou simplesmente adicionando um separador de vírgulas. O separador de vírgulas é geralmente mais legível para nossos propósitos, então vamos com essa opção:

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

Isso nos dá o nosso nome como esperado:

Name is: Jane Doe

Uma correção bastante simples, para ter certeza, mas esse é o problema com o erro Missing Parenthesis After Argument List, e com SyntaxErrors em geral. Todos eles são tão óbvios uma vez descobertos, mas a menos que seu editor de código analise e avalie seu código para erros de sintaxe na hora, muitas vezes é fácil perdê-los até que você mesmo teste o código.

Também vale a pena notar que, como outros SyntaxErrors, o erro Missing Parenthesis After Argument List não pode ser facilmente capturado pelo típico bloco try-catch. Como o problema é a sintaxe, a tentativa do motor JavaScript de executar o código problemático falha nesse exato momento. Isto normalmente significa que não chega ao ponto na execução onde pode continuar até à parte catch do bloco, uma vez que não sabe como analisar isso correctamente. Isto pode ser trabalhado deslocando a execução através de diferentes ficheiros e camadas, mas para todos os efeitos básicos, catching SyntaxErrors é um grande desafio.

Para mergulhar ainda mais fundo na compreensão de como as suas aplicações lidam com os erros JavaScript, verifique a revolucionária ferramenta de seguimento de erros JavaScript do Airbrake para alertas em tempo real e uma visão instantânea do que correu mal com o seu código JavaScript.

Deixe uma resposta

O seu endereço de email não será publicado.