Sobes.tech
Junior

¿Qué verifica el operador instanceof en JavaScript?

sobes.tech AI

Respuesta de la IA

El operador instanceof en JavaScript verifica si un objeto es una instancia de una clase o constructor específico.

Principio de funcionamiento:

  1. El operador instanceof comprueba la presencia de prototype del constructor en la cadena de prototipos del objeto.
  2. Si prototype del constructor está presente en la cadena, el resultado es true.
  3. De lo contrario, el resultado es false.

Ejemplos:

// Crear una clase
class Animal {
  // Constructor
  constructor(name) {
    this.name = name;
  }
}

// Crear una instancia de la clase
let dog = new Animal("Buddy");

// Verificar si dog es una instancia de Animal
console.log(dog instanceof Animal); // true

// Verificar si dog es una instancia de Object (lo es, a través de la cadena de prototipos)
console.log(dog instanceof Object); // true

// Verificar si dog es una instancia de Array (no lo es)
console.log(dog instanceof Array); // false

// Verificación con tipos integrados
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 se comporta de manera específica)
// Para primitivos creados con new
let numObj = new Number(123);
console.log(numObj instanceof Number); // true

Características:

  • instanceof funciona a través de la cadena de prototipos, por lo que el resultado puede ser true para constructores padres.
  • Para tipos primitivos (string, number, boolean, null, undefined, symbol, bigint), instanceof generalmente devuelve false si no fueron creados mediante el objeto envoltorio correspondiente (new String(), new Number(), etc.).
  • Puede ser inexacto cuando se trabaja con diferentes contextos de ejecución de JavaScript (por ejemplo, diferentes ventanas del navegador o iframe), ya que cada contexto tiene sus propios constructores.

Enfoques similares para verificar el tipo:

  • typeof: Devuelve una cadena que indica el tipo de datos básico (string, number, boolean, object, function, undefined, symbol, bigint). No es adecuado para verificar la pertenencia a una clase específica.
  • Object.prototype.toString.call(): Devuelve una cadena más precisa con el tipo del objeto ("[object Array]", "[object Date]", etc.).

En general, instanceof es útil para verificar si un objeto pertenece a una clase o a su ancestro en la jerarquía de herencia.