[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Operators/instanceof [Back]  [Original]

instanceof - JavaScript | MDN

Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.

View in English Always switch to English

instanceof

Baseline Large disponibilit

Cette fonctionnalit est bien tablie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.

L'oprateur instanceof permet de tester si un objet possde, dans sa chane de prototype, la proprit prototype d'un certain constructeur.

Dans cet article

Exemple interactif

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}
const auto = new Car("Honda", "Accord", 1998);

console.log(auto instanceof Car);
// Expected output: true

console.log(auto instanceof Object);
// Expected output: true

Syntaxe

js
objet instanceof constructeur;

Paramtres

objet

L'objet qu'on souhaite analyser.

constructeur

La fonction dont on souhaite vrifier la prsence dans la chane de prototypes.

Description

L'oprateur instanceof teste la prsence de constructeur.prototype dans la chane de prototypes d'objet.

js
function C() {} // Dfinition du constructeur
function D() {} // Dfinition d'un autre constructeur

var o = new C();

// true, car : Object.getPrototypeOf(o) === C.prototype
o instanceof C;

// false, car D.prototype n'existe pas dans la chane de prototype de o
o instanceof D;

o instanceof Object; // true, car:
C.prototype instanceof Object; // true

C.prototype = {};
var o2 = new C();

o2 instanceof C; // true

// false, car C.prototype n'existe plus dans la chane de prototype de o
o instanceof C;

D.prototype = new C(); // Utilisation de l'hritage
var o3 = new D();
o3 instanceof D; // true
o3 instanceof C; // true car C.prototype fait partie de la chane de o3

noter que la valeur retourne par instanceof peut tre diffrente suite un changement de la proprit prototype du constructeur, notamment via la mthode Object.setPrototypeOf(). On peut aussi utiliser la pseudo-proprit __proto__ qui n'tait pas standard avant ECMAScript 2015.

instanceof dans d'autres contextes (frames ou fentres)

Diffrents niveaux d'intgrations ont diffrents environnements. Cela signifie que les valeurs retournes sont diffrentes (objet globaux diffrents, constructeurs diffrents, etc.). Cela peut engendrer des rsultats inattendus. Par exemple, [] instanceof window.frames[0].Array renverra false, car Array !== window.frames[0].Array et que les tableaux hritent de leur constructeur.

Cela peut tre contre-intuitif au dbut, mais lorsqu'il est ncessaire de travailler avec plusieurs frames ou fentres, et que des objets sont transfrs via des fonctions, cela sera un obstacle valide et important. Par contre, il est tout fait possible d'utiliser Array.isArray(myObj) pour vrifier de manire scurise qu'un tableau est effectivement un tableau.

Ainsi, pour vrifier qu'un nud est bien un objet de type SVGElement dans un autre contexte, on pourra utiliser monNud instanceof monNud.documentMaitre.vue.SVGElement.

Exemples

Dmonstration que String et Date sont de type Object et cas aux limites des littraux

Le code suivant utilise instanceof pour dmontrer que les objets String et Date sont aussi de type Object (ils drivent d'Object).

Cependant, les objets crs partir de littraux objets sont une exception : en effet, bien que leur prototype ne soit pas dfini, instanceof Object renvoie true.

js
var chaneSimple = "Une chane simple";
var maChane  = new String();
var newChane = new String("Chane cre avec un constructeur");
var maDate    = new Date();
var monObjet  = {};
var monNonObjet = Object.create(null);

chaneSimple instanceof String; //false car le prototype vaut undefined
maChane instanceof String; // true
newChane instanceof String; // true
maChane instanceof Object; // true

monObjet instanceof Object;  // true, bien que le protoype soit undefined
({}) instanceof Object;      // true, comme pour le cas prcdent
monNonObjet instance Object; // false

maChane instanceof Date;    // false

maDate instanceof Date;      // true
maDate instanceof Object;    // true
maDate instanceof String;    // false

Dmonstration que mavoiture est de type Voiture et de type Object

Le code suivant cr un objet de type Voiture et une instance de cet objet, mavoiture. L'oprateur instanceof montre que l'objet mavoiture est de type Voiture et de type Object.

js
function Voiture(fabricant, modele, annee) {
  this.fabricant = fabricant;
  this.modele = modele;
  this.annee = annee;
}
var mavoiture = new Voiture("Citron", "C3", 2006);
var a = mavoiture instanceof Voiture; // retourne true
var b = mavoiture instanceof Object; // retourne true

Attention la prcdence des oprateurs

Pour tester qu'un objet n'est pas une instance d'un constructeur donn, on pourra faire le test !(monObj instanceof Constructor). Toutefois, attention ne pas crire !monObj instanceof Constructor car !monObj serait trait en priorit et on testerait donc false instanceof Constructor qui sera toujours faux.

Spcifications

Spcification
ECMAScript 2027 LanguageSpecification
# sec-relational-operators

Compatibilit des navigateurs

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page