Object.prototype.hasOwnProperty()

Résumé

La méthode hasOwnProperty() retourne un booléen indicant si l'objet a la propriété spécifiée.

Syntaxe

obj.hasOwnProperty(prop)

Paramètres

prop
Le nom de la propriété à tester.

Description

Chaque objet descendant d' Object hérite de la méthode hasOwnProperty. Cette méthode peut être utilisée pour déterminier si un objet a la propriété spécifiée en tant que propriété directe de cet objet. Contrairement à l'opérateur in, cette méthode ne vérifie pas la chaîne des prototypes de l'objet.

Exemples

Exemple: Utiliser hasOwnProperty pour tester l'existence d'une propriété

L'exemple suivant détermine si l'objet o contient une propriété appelée prop:

o = new Object();
o.prop = 'exists';

function changeO() {
  o.newprop = o.prop;
  delete o.prop;
}

o.hasOwnProperty('prop');   // retourne true
changeO();
o.hasOwnProperty('prop');   // retourne false

Exemple: propriétés directes versus propriétés héritées

L'exemple suivant illustre la différence entre les propriétés directes et les propriétés héritées à partir de la chaîne de prototypes:

o = new Object();
o.prop = 'exists';
o.hasOwnProperty('prop');             // retourne true
o.hasOwnProperty('toString');         // retourne false
o.hasOwnProperty('hasOwnProperty');   // retourne false

Exemple: Parcourir les propriétés d'un objet

L'exemple suivant montre comment parcourir les propriétés d'un objet sans exécuter les propriétés héritées. Notez que la boucle for..in ne prend en compte que les éléments énumérables. Il ne faut donc pas déduire de l'absence de propriétés non-énumérables dans la boucle, que hasOwnProperty est elle-même strictement restreinte aux éléments énumérables (comme c'est le cas pour Object.getOwnPropertyNames()) .

var buz = {
    fog: 'stack'
};

for (var name in buz) {
    if (buz.hasOwnProperty(name)) {
        alert("this is fog (" + name + ") for sure. Value: " + buz[name]);
    }
    else {
        alert(name); // toString ou autre
    }
}

Exemple: hasOwnProperty en tant que propriété

JavaScript ne protège pas le nom de propriété hasOwnProperty; ainsi, si il est possible qu'un objet puisse avoir une propriété avec ce nom, il est nécessaire d'utiliser une version externe de la méthode pour obtenir des résultats corrects.

var foo = {
    hasOwnProperty: function() {
        return false;
    },
    bar: 'Here be dragons'
};

foo.hasOwnProperty('bar'); // retourne toujours false

// Utilise la méthode hasOwnProperty d'un autre Object et l'appelle avec 'this' assigné à foo
({}).hasOwnProperty.call(foo, 'bar'); // true

// Il est aussi possible d'utiliser la propriété hasOwnProperty de la propriété Object
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true

Notez que dans le dernier cas, aucun nouvel objet n'est crée.

Spécifications

Specification Status Comment
ECMAScript 3rd Edition. Implemented in JavaScript 1.5 Standard Initial definition.
ECMAScript Language Specification 5.1th Edition (ECMA-262) Standard  
ECMAScript Language Specification 6th Edition (ECMA-262) Draft  

Compatibilité des navigateurs

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Oui) (Oui) (Oui) (Oui) (Oui)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Oui) (Oui) (Oui) (Oui) (Oui) (Oui)

Voir aussi

Étiquettes et contributeurs liés au document

Contributeurs ayant participé à cette page : N.greff
Dernière mise à jour par : N.greff,