Sobes.tech
Junior

Cosa verifica l'operatore instanceof in JavaScript?

sobes.tech AI

Risposta dell'AI

L'operatore instanceof in JavaScript verifica se un oggetto è un'istanza di una determinata classe o costruttore.

Principio di funzionamento:

  1. L'operatore instanceof controlla la presenza di prototype del costruttore nella catena di prototipi dell'oggetto.
  2. Se prototype del costruttore è presente nella catena, il risultato è true.
  3. Altrimenti, il risultato è false.

Esempi:

// Creiamo una classe
class Animal {
  // Costruttore
  constructor(name) {
    this.name = name;
  }
}

// Creiamo un'istanza della classe
let dog = new Animal("Buddy");

// Verifichiamo se dog è un'istanza di Animal
console.log(dog instanceof Animal); // true

// Verifichiamo se dog è un'istanza di Object (lo è, tramite la catena di prototipi)
console.log(dog instanceof Object); // true

// Verifichiamo se dog è un'istanza di Array (non lo è)
console.log(dog instanceof Array); // false

// Verifica con tipi integrati
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 (per i primitivi, instanceof si comporta in modo specifico)
// Per i primitivi creati con new
let numObj = new Number(123);
console.log(numObj instanceof Number); // true

Caratteristiche:

  • instanceof funziona attraverso la catena di prototipi, quindi il risultato può essere true anche per i costruttori genitori.
  • Per i tipi primitivi (string, number, boolean, null, undefined, symbol, bigint), instanceof di solito restituisce false se non sono stati creati tramite l'oggetto wrapper corrispondente (new String(), new Number(), ecc.).
  • Può essere impreciso quando si lavora con diversi contesti di esecuzione di JavaScript (ad esempio, finestre o iframe diversi), poiché ogni contesto ha i propri costruttori.

Approcci simili per verificare il tipo:

  • typeof: restituisce una stringa che indica il tipo di dato di base (string, number, boolean, object, function, undefined, symbol, bigint). Non è adatto per verificare l'appartenenza a una classe specifica.
  • Object.prototype.toString.call(): restituisce una stringa più precisa con il tipo dell'oggetto ("[object Array]", "[object Date]", ecc.).

In generale, instanceof è utile per verificare se un oggetto appartiene a una determinata classe o ai suoi antenati nella gerarchia di ereditarietà.