La méthode hasOwnProperty()
retourne un booléen indiquant si l'objet possède la propriété spécifiée.
Syntaxe
obj.hasOwnProperty(prop)
Paramètres
Valeur de retour
Un booléen qui indique si l'objet possède ou non la propriété indiquée en argument.
Description
Chaque objet descendant d'Object
hérite de la méthode hasOwnProperty
. Cette méthode peut être utilisée pour déterminer 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
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
Propriétés directes et 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
Parcourir les propriétés d'un objet
L'exemple suivant montre comment parcourir les propriétés d'un objet sans traiter les propriétés héritées. On notera 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 bidule = { truc: 'stack' }; for (var nom in bidule) { if (bidule.hasOwnProperty(nom)) { console.log("C'est bien la propriété (" + nom + "), sa valeur : " + bidule[nom]); } else { console.log(nom); // toString ou autre } }
hasOwnProperty
en tant que propriété
JavaScript ne protège pas le nom de propriété hasOwnProperty
, ainsi il est possible qu'un objet puisse avoir une propriété avec ce nom, il sera donc nécessaire d'utiliser une version externe de la méthode pour obtenir des résultats corrects.
var toto = { hasOwnProperty: function() { return false; }, truc: 'Voici les dragons' }; toto.hasOwnProperty('truc'); // renvoie toujours false // On utilise une méthode d'un autre objet // et on l'appelle avec this qui vaut toto ({}).hasOwnProperty.call(toto, 'truc'); // true // On peut aussi utiliser la propriété hasOwnProperty de Object prototype Object.prototype.hasOwnProperty.call(toto, 'bar'); // true
La dernière version utilisée permet de ne pas créer d'objet supplémentaire.
Spécifications
Spécification | État | Commentaires |
---|---|---|
ECMAScript 3rd Edition (ECMA-262) | Standard | Définition initiale. Implémentée avec JavaScript 1.5. |
ECMAScript 5.1 (ECMA-262) La définition de 'Object.prototype.hasOwnProperty' dans cette spécification. |
Standard | |
ECMAScript 2015 (6th Edition, ECMA-262) La définition de 'Object.prototype.hasOwnProperty' dans cette spécification. |
Standard | |
ECMAScript 2017 Draft (ECMA-262) La définition de 'Object.prototype.hasOwnProperty' dans cette spécification. |
Projet |
Compatibilité des navigateurs
Fonctionnalité | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Support simple | (Oui) | (Oui) | (Oui) | (Oui) | (Oui) | (Oui) |
Fonctionnalité | Android | Chrome pour Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Support simple | (Oui) | (Oui) | (Oui) | (Oui) | (Oui) | (Oui) |