As mensagens de erro mais comuns no JavaScript
Um resumo com as mensagens de erro mais comuns do JavaScript
As mensagens de erro do JavaScript são pouco amigáveis para quem está começando a programar.
Vamos ver uma lista das mensagens de erro mais comuns do JavaScript, e alguns exemplos de como elas podem acontecer.
1 - Uncaught TypeError: Cannot Read Property
Este erro ocorre quando você quer acessar uma propriedade ou método de um objeto que não existe.
var produto;
produto.nome = "radio";
produto.valor = 20;
console.log(produto.peso);
2 - TypeError: ‘undefined’ Is Not an Object
Este erro é o mesmo que foi descrito acima, a diferença é que esta mensagem de erro aparece no Chrome.
3. TypeError: ‘null’ Is Not an Object
O erro acima ocorre quando você chama uma propriedade ou método de um objeto null. É igual ao primeiro erro, a diferença é que esta mensagem é específica do Safari.
4. TypeError: Object Doesn’t Support Property
Se você utiliza o navegador Internet Explorer, este erro ocorre quando você chama um método que não foi definido.
var produto;
produto.nome = "radio";
produto.valor = 20;
produto.aumentar();
5. TypeError: ‘this.<>’ Is Not a Function
Este erro ocorre quando você chama uma função que não foi definida, esta mensagem pode aparecer no Chrome e no Firefox
var produto;
produto.nome = "radio";
produto.valor = 20;
produto.aumentar();
6. Uncaught RangeError
Este erro ocorre no Chrome por dois motivos, o primeiro pode ser uma função recursiva que não terminou, e o segundo, um valor fora do intervalo esperado para uma função.
//Exemplo 1
function avisar(){
avisar();
}
avisar();
//Exemplo 2
var numero = 3.14
console.log(numero.toPrecision(1));
console.log(numero.toPrecision(0));
Para o tratamento de erros, podemos utilizar try/catch. O "try" permite informar o código que deve ser testado. O catch permite definir instruções que vão ser executadas, caso tenha ocorrido algum erro no código informado no bloco "try".
try {
executar("comando");
} catch(err) {
console.log(err.message);
}
Além do try e catch, existe o throw, que permite criar erros customizados, e o finally, que permite executar comandos independente do resultado do try/catch.
try {
executar("comando");
} catch(err) {
console.log(err.message);
} finally {
console.log('fim');
}
Ao ocorrer um erro, é gerado um objeto "error", contendo duas propriedades, a primeira se chama name e serve para mostrar qual a categoria do erro, e a propriedade message mostra a mensagem de erro.
Existem 6 tipos de categorias de erro, que são as seguintes:
- EvalError
- RangeError
- ReferenceError
- SyntaxError
- TypeError
- URIError
Uma descrição resumida destes erros você acompanha a seguir:
EvalError
Esta tipo de erro existe por razões de compatibilidade, já que não existe mais deste a versão 5.1 do ECMAScript, ele ocorria quando a função global eval foi utilizada de forma incorreta. Portanto, provavelmente você não deve ver erros deste tipo
RangeError
Ocorre quando um número informado não é compatível com o intervalo de números válidos.
var numero = 3.14
console.log(numero.toPrecision(0));
Algumas mensagens de erro deste tipo são as seguintes:
- RangeError: argument is not a valid code point
- RangeError: precision is out of range
- RangeError: invalid array length
- RangeError: invalid date
- RangeError: radix must be an integer
- RangeError: repeat count must be less than infinity
- RangeError: repeat count must be non-negative
ReferenceError
Os erros de referência ocorrem quando ocorre uma referência inválida, ou seja, se tenta acessar uma variável/metodo/propriedade que não existe.
function foo() {
'use strict';
bar = true; //variavel não declarada
}
foo();
Mensagens de erro deste tipo:
- ReferenceError: "x" is not defined
- ReferenceError: assignment to undeclared variable "x"
- ReferenceError: can't access lexical declaration 'X' before initialization
- ReferenceError: deprecated caller or arguments usage
- ReferenceError: invalid assignment left-hand side
- ReferenceError: reference to undefined property "x"
SyntaxError
Ocorrem quando é detectado um erro de sintaxe na programação.
Math.max(2, 42,);
Mensagens de erro deste tipo:
- SyntaxError: JSON.parse: bad parsing
- SyntaxError: Malformed formal parameter
- SyntaxError: "0"-prefixed octal literals and octal escape seq. are deprecated
- SyntaxError: "use strict" not allowed in function with non-simple parameters
- SyntaxError: "x" is a reserved identifier
- SyntaxError: Unexpected token
- SyntaxError: Using //@ to indicate sourceURL pragmas is deprecated. Use //# instead
- SyntaxError: a declaration in the head of a for-of loop can't have an initializer
- SyntaxError: applying the 'delete' operator to an unqualified name is deprecated
- SyntaxError: for-in loop head declarations may not have initializers
- SyntaxError: function statement requires a name
- SyntaxError: identifier starts immediately after numeric literal
- SyntaxError: illegal character
- SyntaxError: invalid regular expression flag "x"
- SyntaxError: missing ) after argument list
- SyntaxError: missing ) after condition
- SyntaxError: missing : after property id
- SyntaxError: missing ; before statement
- SyntaxError: missing = in const declaration
- SyntaxError: missing ] after element list
- SyntaxError: missing formal parameter
- SyntaxError: missing name after . operator
- SyntaxError: missing variable name
- SyntaxError: missing } after function body
- SyntaxError: missing } after property list
- SyntaxError: redeclaration of formal parameter "x"
- SyntaxError: return not in function
- SyntaxError: test for equality (==) mistyped as assignment (=)?
- SyntaxError: unterminated string literal
TypeError
Estes erros ocorrem quando um valor tem um tipo diferente daquele que é esperado.
var produto;
produto.nome = "radio";
produto.valor = 20;
produto.aumentar();
Mensagens de erro deste tipo:
- TypeError: "x" has no properties
- TypeError: "x" is (not) "y"
- TypeError: "x" is read-only
- TypeError: "x" is not a constructor
- TypeError: "x" is not a function
- TypeError: "x" is not a non-null object
- TypeError: 'x' is not iterable
- TypeError: More arguments needed
- TypeError: Reduce of empty array with no initial value
- TypeError: can't access dead object
- TypeError: can't access property "x" of "y"
- TypeError: can't define property "x": "obj" is not extensible
- TypeError: can't delete non-configurable array element
- TypeError: can't redefine non-configurable property "x"
- TypeError: cannot use 'in' operator to search for 'x' in 'y'
- TypeError: cyclic object value
- TypeError: invalid 'instanceof' operand 'x'
- TypeError: invalid Array.prototype.sort argument
- TypeError: invalid arguments
- TypeError: invalid assignment to const "x"
- TypeError: property "x" is non-configurable and can't be deleted
- TypeError: setting getter-only property "x"
- TypeError: variable "x" redeclares argument
URIError
Ocorre quando passamos uma URI inválida para as seguintes funções globais:
- decodeURI()
- decodeURIComponent()
- encodeURI()
- encodeURIComponent()
decodeURIComponent('%')