Junior
Wat controleert de operator instanceof in JavaScript?
sobes.tech AI
Antwoord van AI
De instanceof operator in JavaScript controleert of een object een instantie is van een bepaalde klasse of constructor.
Werking:
- De
instanceofoperator controleert of deprototypevan de constructor aanwezig is in de prototype-keten van het object. - Als de
prototypevan de constructor in de keten aanwezig is, is het resultaattrue. - Anders is het resultaat
false.
Voorbeelden:
// Een klasse maken
class Animal {
// Constructor
constructor(name) {
this.name = name;
}
}
// Een instantie van de klasse maken
let dog = new Animal("Buddy");
// Controleren of dog een instantie is van Animal
console.log(dog instanceof Animal); // true
// Controleren of dog een instantie is van Object (dat is het, via de prototype-keten)
console.log(dog instanceof Object); // true
// Controleren of dog een instantie is van Array (dat is het niet)
console.log(dog instanceof Array); // false
// Met ingebouwde types
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 (voor primitieve types, `instanceof` gedraagt zich specifiek)
// Voor primitieve types gemaakt met new
let numObj = new Number(123);
console.log(numObj instanceof Number); // true
Eigenschappen:
instanceofwerkt via de prototype-keten, dus het resultaat kantruezijn voor ouderlijke constructeurs.- Voor primitieve types (string, number, boolean, null, undefined, symbol, bigint), geeft
instanceofmeestalfalseals ze niet via het bijbehorende wrapper-object zijn gemaakt (new String(),new Number(), etc.). - Kan onnauwkeurig zijn bij gebruik in verschillende JavaScript-uitvoeringscontexten (bijvoorbeeld, verschillende vensters of iframe's), omdat elke context zijn eigen constructeurs heeft.
Vergelijkbare methoden voor typecontrole:
typeof: geeft een string die het basistype aangeeft (string, number, boolean, object, function, undefined, symbol, bigint). Niet geschikt voor het controleren van lidmaatschap aan een specifieke klasse.Object.prototype.toString.call(): geeft een meer precieze string met het objecttype ("[object Array]","[object Date]", etc.).
Over het algemeen is instanceof handig om te controleren of een object tot een bepaalde klasse of zijn voorouder behoort in de erfenishierarchie.