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 objectoError
. - O
Missing Parenthesis After Argument List
erro é um tipo específico deSyntaxError
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.