Sobes.tech
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:

  1. De instanceof operator controleert of de prototype van de constructor aanwezig is in de prototype-keten van het object.
  2. Als de prototype van de constructor in de keten aanwezig is, is het resultaat true.
  3. 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:

  • instanceof werkt via de prototype-keten, dus het resultaat kan true zijn voor ouderlijke constructeurs.
  • Voor primitieve types (string, number, boolean, null, undefined, symbol, bigint), geeft instanceof meestal false als 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.