[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwn [Back]  [Original]

Object.hasOwn() - 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

Object.hasOwn()

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 mars 2022.

Exprimental: Il s'agit d'une technologie exprimentale.
Vrifiez attentivement le tableau de compatibilit des navigateurs avant de l'utiliser en production.

La mthode statique Object.hasOwn() renvoie true si l'objet indiqu possde la proprit indique comme proprit propre. Si la proprit est hrite ou qu'elle n'existe pas, la mthode renverra false.

Note : Object.hasOwn() est conu comme une mthode de remplacement pour Object.hasOwnProperty().

Dans cet article

Exemple interactif

const object1 = {
  prop: "exists",
};

console.log(Object.hasOwn(object1, "prop"));
// Expected output: true

console.log(Object.hasOwn(object1, "toString"));
// Expected output: false

console.log(Object.hasOwn(object1, "undeclaredPropertyValue"));
// Expected output: false

Syntaxe

js
Object.hasOwn(instance, prop);

Paramtres

instance

L'objet JavaScript pour lequel on souhaite tester la prsence d'une proprit.

prop

Une chane de caractres (String) indiquant le nom de la proprit recherche ou un symbole (Symbol) dsignant la proprit.

Valeur de retour

true si l'objet indiqu possde, directement, la proprit indique, false sinon.

Description

La mthode Object.hasOwn() renvoie true si la proprit indique est une proprit directe de l'objet (et mme si celle-ci vaut null ou undefined). La mthode renvoie false si la proprit est hrite ou si elle n'a pas t dclare. la diffrence de l'oprateur in, cette mthode ne consulte pas la chane de prototypes de l'objet pour dtecter la proprit.

Object.hasOwn() pourra tre recommande en lieu et place de Object.hasOwnProperty() car elle fonctionne sur les objets crs avec Object.create(null) et pour les objets qui ont surcharg la mthode hrite hasOwnProperty(). Bien qu'il soit possible de contourner ces deux problmes en invoquant Object.prototype.hasOwnProperty() sur un objet externe, Object.hasOwn() semble plus intuitif.

Exemples

Utiliser Object.hasOwn() pour tester l'existence d'une proprit

Le code suivant illustre comment dterminer si l'objet exemple contient une proprit intitule prop.

js
let exemple = {};
Object.hasOwn(exemple, "prop"); // false : 'prop' n'a pas t dfinie

exemple.prop = "existe";
Object.hasOwn(exemple, "prop"); // true : 'prop' a t dfinie

exemple.prop = null;
Object.hasOwn(exemple, "prop"); // true : la proprit existe malgr sa valeur null

exemple.prop = undefined;
Object.hasOwn(exemple, "prop"); // true : la proprit existe malgr sa valeur undefined

Proprits propres et proprits hrites

Dans l'exemple suivant, on distingue les proprits propres/directes et celles qui sont hrites via la chane de prototypes :

js
let exemple = {};
exemple.prop = "existe";

// `Objet.hasOwn()` renverra true seulement pour les proprits propres
Object.hasOwn(exemple, "prop"); // renvoie true
Object.hasOwn(exemple, "toString"); // renvoie false
Object.hasOwn(exemple, "hasOwnProperty"); // renvoie false

// L'oprateur `in` renverra true pour les proprits propres et hrites
"prop" in exemple; // renvoie true
"toString" in exemple; // renvoie true
"hasOwnProperty" in exemple; // renvoie true

Parcourir les proprits d'un objet=

Pour parcourir les proprits numrables d'un objet, on privilgiera cette forme :

js
let exemple = { toto: true, truc: true };
for (let nom of Object.keys(exemple)) {
  // 
}

S'il est ncessaire d'utiliser for..in, on pourra utiliser Object.hasOwn() afin de filtrer les proprits hrites :

js
let exemple = { toto: true, truc: true };
for (let nom in exemple) {
  if (Object.hasOwn(exemple, nom)) {
    // 
  }
}

Vrifier l'existence d'un indice dans un tableau

Les lments d'un tableau (Array) sont dfinis comme proprits propres. Ainsi, Object.hasOwn() pourra tre utilis pour vrifier si un indice donn existe :

js
let fruits = ["Pomme", "Banane", "Melon", "Orange"];
Object.hasOwn(fruits, 3); // true ('Orange')
Object.hasOwn(fruits, 4); // false, non dfini

Cas problmatiques pour hasOwnProperty()

Cette section illustre l'immunit de Object.hasOwn() concernant des problmes qui se posent pour Object.prototype.hasOwnProperty(). Tout d'abord, on peut utiliser cette premire avec des objets qui ont rimplment hasOwnProperty() :

js
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 crs avec Object.create(null) qui n'hritent pas de Object.prototype et pour qui hasOwnProperty() est donc inaccessible.

js
let toto = Object.create(null);
toto.prop = "existe";
if (Object.hasOwn(toto, "prop")) {
  console.log(toto.prop); // true.
}

Spcifications

Spcification
ECMAScript 2027 LanguageSpecification
# sec-object.hasown

Compatibilit des navigateurs

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page