Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
Object.hasOwn()
Baseline Widely available
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis mars 2022.
Expérimental:Il s'agit d'unetechnologie expérimentale.
Vérifiez attentivement letableau de compatibilité des navigateurs avant de l'utiliser en production.
La méthode statiqueObject.hasOwn() renvoietrue si l'objet indiqué possède la propriété indiquée comme propriétépropre. Si la propriété est héritée ou qu'elle n'existe pas, la méthode renverrafalse.
Note :Object.hasOwn() est conçu comme une méthode de remplacement pourObject.hasOwnProperty().
Dans cet article
Exemple interactif
const object1 = { prop: "exists",};console.log(Object.hasOwn(object1, "prop"));// Expected output: trueconsole.log(Object.hasOwn(object1, "toString"));// Expected output: falseconsole.log(Object.hasOwn(object1, "undeclaredPropertyValue"));// Expected output: falseSyntaxe
Object.hasOwn(instance, prop);Paramètres
Valeur de retour
true si l'objet indiqué possède, directement, la propriété indiquée,false sinon.
Description
La méthodeObject.hasOwn() renvoietrue si la propriété indiquée est une propriété directe de l'objet (et même si celle-ci vautnull ouundefined). La méthode renvoiefalse si la propriété est héritée ou si elle n'a pas été déclarée. À la différence de l'opérateurin, cette méthode ne consulte pas la chaîne de prototypes de l'objet pour détecter la propriété.
Object.hasOwn() pourra être recommandée en lieu et place deObject.hasOwnProperty() car elle fonctionne sur les objets créés avecObject.create(null) et pour les objets qui ont surchargé la méthode héritéehasOwnProperty(). Bien qu'il soit possible de contourner ces deux problèmes en invoquantObject.prototype.hasOwnProperty() sur un objet externe,Object.hasOwn() semble plus intuitif.
Exemples
>Utiliser Object.hasOwn() pour tester l'existence d'une propriété
Le code suivant illustre comment déterminer si l'objetexemple contient une propriété intituléeprop.
let exemple = {};Object.hasOwn(exemple, "prop"); // false : 'prop' n'a pas été définieexemple.prop = "existe";Object.hasOwn(exemple, "prop"); // true : 'prop' a été définieexemple.prop = null;Object.hasOwn(exemple, "prop"); // true : la propriété existe malgré sa valeur nullexemple.prop = undefined;Object.hasOwn(exemple, "prop"); // true : la propriété existe malgré sa valeur undefinedPropriétés propres et propriétés héritées
Dans l'exemple suivant, on distingue les propriétés propres/directes et celles qui sont héritées via la chaîne de prototypes :
let exemple = {};exemple.prop = "existe";// `Objet.hasOwn()` renverra true seulement pour les propriétés propresObject.hasOwn(exemple, "prop"); // renvoie trueObject.hasOwn(exemple, "toString"); // renvoie falseObject.hasOwn(exemple, "hasOwnProperty"); // renvoie false// L'opérateur `in` renverra true pour les propriétés propres et héritées"prop" in exemple; // renvoie true"toString" in exemple; // renvoie true"hasOwnProperty" in exemple; // renvoie trueParcourir les propriétés d'un objet=
Pour parcourir les propriétés énumérables d'un objet, on privilégiera cette forme :
let exemple = { toto: true, truc: true };for (let nom of Object.keys(exemple)) { // …}S'il est nécessaire d'utiliserfor..in, on pourra utiliserObject.hasOwn() afin de filtrer les propriétés héritées :
let exemple = { toto: true, truc: true };for (let nom in exemple) { if (Object.hasOwn(exemple, nom)) { // … }}Vérifier l'existence d'un indice dans un tableau
Les éléments d'un tableau (Array) sont définis comme propriétés propres. Ainsi,Object.hasOwn() pourra être utilisé pour vérifier si un indice donné existe :
let fruits = ["Pomme", "Banane", "Melon", "Orange"];Object.hasOwn(fruits, 3); // true ('Orange')Object.hasOwn(fruits, 4); // false, non définiCas problématiques pour hasOwnProperty()
Cette section illustre l'immunité deObject.hasOwn() concernant des problèmes qui se posent pourObject.prototype.hasOwnProperty(). Tout d'abord, on peut utiliser cette première avec des objets qui ont réimplémentéhasOwnProperty() :
let toto = { hasOwnProperty: function () { return false; }, truc: "Ga bu zo meu",};if (Object.hasOwn(toto, "truc")) { console.log(toto.truc); //true - la surcharge de hasOwnProperty() n'a pas d'impact}On peut également l'utiliser pour tester des objets créés avecObject.create(null) qui n'héritent pas deObject.prototype et pour quihasOwnProperty() est donc inaccessible.
let toto = Object.create(null);toto.prop = "existe";if (Object.hasOwn(toto, "prop")) { console.log(toto.prop); // true.}Spécifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-object.hasown> |
Compatibilité des navigateurs
Voir aussi
- Caractère énumérable et rattachement des propriétés
- Héritage et chaîne de prototypes dans le guide JavaScript
Object.hasOwnProperty()Object.getOwnPropertyNames()for...inin- Une prothèse d'émulation pour
Object.hasOwn()disponible aveccore-js