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:
- L'operatore
instanceofcontrolla la presenza diprototypedel costruttore nella catena di prototipi dell'oggetto. - Se
prototypedel costruttore è presente nella catena, il risultato ètrue. - 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:
instanceoffunziona attraverso la catena di prototipi, quindi il risultato può esseretrueanche per i costruttori genitori.- Per i tipi primitivi (string, number, boolean, null, undefined, symbol, bigint),
instanceofdi solito restituiscefalsese 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à.