Sobes.tech
Junior

O que verifica o operador instanceof em JavaScript?

sobes.tech IA

Resposta da IA

O operador instanceof em JavaScript verifica se um objeto é uma instância de uma classe ou construtor específico.

Princípio de funcionamento:

  1. O operador instanceof verifica a presença de prototype do construtor na cadeia de protótipos do objeto.
  2. Se prototype do construtor estiver presente na cadeia, o resultado é true.
  3. Caso contrário, o resultado é false.

Exemplos:

// Criar uma classe
class Animal {
  // Construtor
  constructor(name) {
    this.name = name;
  }
}

// Criar uma instância da classe
let dog = new Animal("Buddy");

// Verificar se dog é uma instância de Animal
console.log(dog instanceof Animal); // true

// Verificar se dog é uma instância de Object (é, através da cadeia de protótipos)
console.log(dog instanceof Object); // true

// Verificar se dog é uma instância de Array (não é)
console.log(dog instanceof Array); // false

// Verificação com tipos embutidos
let arr = [1, 2, 3];
console.log(arr instanceof Array); // true
console.log(arr instanceof Object); // true

let num = 123;
console.log(num instanceof Number); // false (para primitivos, instanceof comporta-se de forma específica)
// Para primitivos criados com new
let numObj = new Number(123);
console.log(numObj instanceof Number); // true

Características:

  • instanceof funciona através da cadeia de protótipos, portanto, o resultado pode ser true para construtores pai.
  • Para tipos primitivos (string, number, boolean, null, undefined, symbol, bigint), instanceof geralmente retorna false se não foram criados através do objeto de envolvimento correspondente (new String(), new Number(), etc.).
  • Pode ser impreciso ao trabalhar com diferentes contextos de execução do JavaScript (por exemplo, diferentes janelas do navegador ou iframe), pois cada contexto tem seus próprios construtores.

Abordagens semelhantes para verificar o tipo:

  • typeof: Retorna uma string indicando o tipo de dado básico (string, number, boolean, object, function, undefined, symbol, bigint). Não é adequado para verificar a pertença a uma classe específica.
  • Object.prototype.toString.call(): Retorna uma string mais precisa com o tipo do objeto ("[object Array]", "[object Date]", etc.).

Em geral, instanceof é útil para verificar se um objeto pertence a uma classe ou a seu ancestral na hierarquia de herança.