Revisão de Depuração de JavaScript

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.