Tipos Comuns de Mensagens de Erro
- SyntaxError: Esses erros acontecem quando você escreve algo incorretamente no seu código, como esquecer um parêntese ou um colchete. Pense nisso como um erro gramatical em uma frase.
const arr = ["Beau", "Quincy" "Tom"]
- ReferenceError: Existem vários tipos de Reference Errors, acionados de maneiras diferentes. O primeiro tipo de reference error seria variáveis não definidas. Outro exemplo de ReferenceError é tentar acessar uma variável, declarada com
let ou const, antes de ela ter sido definida.
console.log(num);
const num = 50;
- TypeError: Esses erros ocorrem quando você tenta realizar uma operação em um tipo errado.
const developerObj = {
name: "Jessica",
country: "USA",
isEmployed: true
};
developerObj.map()
- RangeError: Esses erros acontecem quando seu código tenta usar um valor que está fora do intervalo que o JavaScript pode manipular.
const arr = [];
arr.length = -1;
A Declaração throw
- Definição: A declaração
throw em JavaScript é usada para lançar uma exceção definida pelo usuário. Uma exceção em programação é quando um evento inesperado acontece e interrompe o fluxo normal do programa.
function validateNumber(input) {
if (typeof input !== "number") {
throw new TypeError("Expected a number, but received " + typeof input);
}
return input * 2;
}
console.log(validateNumber("Naomi")); // TypeError: Expected a number, but received string
try...catch...finally
- Definição: O bloco
try é usado para envolver código que pode gerar um erro. Ele atua como um espaço seguro para tentar algo que pode falhar. O bloco catch captura e trata erros que ocorrem no bloco try. Você pode usar o objeto de erro dentro do catch para inspecionar o que deu errado. O bloco finally é executado após os blocos try e catch, independentemente de um erro ter ocorrido. Ele é comumente usado para tarefas de limpeza, como fechar arquivos ou liberar recursos.
function processInput(input) {
if (typeof input !== "string") {
throw new TypeError("Input must be a string.");
}
return input.toUpperCase();
}
try {
console.log("Starting to process input...");
const result1 = processInput("hello");
console.log("Processed result:", result1); // HELLO
const result2 = processInput(9); // throws TypeError
console.log("Processed result:", result2); // not executed
} catch (error) {
console.error("Error occurred:", error.message);
}
Técnicas de Depuração
- Declaração
debugger: Esta declaração permite que você pause seu código em uma linha específica para investigar o que está acontecendo no programa.
let firstNumber = 5;
let secondNumber = 10;
debugger; // Code execution pauses here
let sum = firstNumber + secondNumber;
console.log(sum);
- Breakpoints: Breakpoints permitem que você pause a execução do seu código em uma linha específica de sua escolha. Após a pausa, você pode inspecionar variáveis, avaliar expressões e examinar a pilha de chamadas.
- Watchers: Expressões de observação permitem que você monitore os valores de variáveis ou expressões enquanto o código é executado mesmo que estejam fora do escopo atual.
- Profiling: O profiling ajuda você a identificar gargalos de desempenho permitindo capturar screenshots e registrar o uso da CPU, chamadas de função e tempo de execução.
console.dir(): Este método é usado para exibir uma lista interativa das propriedades de um objeto JavaScript especificado. Ele gera uma listagem hierárquica que pode ser expandida para ver todas as propriedades aninhadas.
console.dir(document);
console.table(): Este método exibe dados tabulares como uma tabela no console. Ele recebe um argumento obrigatório, que deve ser um array ou um objeto, e um argumento opcional para especificar quais propriedades (colunas) exibir.