Object.getOwnPropertyDescriptor()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

La méthode Object.getOwnPropertyDescriptor() renvoie un descripteur de la propriété propre d'un objet (c'est-à-dire une propriété directement présente et pas héritée via la chaîne de prototypes).

Exemple interactif

Syntaxe

js
Object.getOwnPropertyDescriptor(obj, prop);

Paramètres

obj

L'objet sur lequel on cherche la propriété.

prop

Le nom ou le symbole (Symbol) de la propriété dont on souhaite avoir la description.

Valeur de retour

Un descripteur de propriété de la propriété souhaitée si elle existe pour l'objet en question, sinon undefined.

Description

Cette méthode permet d'avoir des informations précises sur une propriété. Une propriété JavaScript est un nom (qui est une chaîne de caractères) ou un symbole (Symbol) associé à un descripteur. Voir la page Object.defineProperty pour plus d'informations sur les descripteurs de propriétés.

Un descripteur de propriété est un enregistrement qui dispose des attributs suivants :

value

La valeur associée à la propriété (pour les descripteurs de données uniquement).

writable

true si et seulement si la valeur associée à la propriété peut être changée (pour les descripteurs de données uniquement).

get

Une fonction qui joue le rôle d'accesseur (getter) pour la propriété ou undefined s'il n'y a pas d'accesseur (pour les descripteurs d'accesseurs uniquement).

set

Une fonction qui joue le rôle de mutateur (setter) pour la propriété ou undefined s'il n'y a pas de tel mutateur (pour les descripteurs d'accesseurs uniquement).

configurable

true si et seulement si le type du descripteur peut être changé et si la propriété peut être supprimée de l'objet.

enumerable

true si et seulement si la propriété doit apparaître lors d'une énumération des propriétés de l'objet.

Exemples

js
var o, d;

o = {
  get toto() {
    return 17;
  },
};
d = Object.getOwnPropertyDescriptor(o, "toto");
// d : {
//       configurable: true,
//       enumerable: true,
//       get: /*l'accesseur*/,
//       set: undefined
//    }

o = { truc: 42 };
d = Object.getOwnPropertyDescriptor(o, "truc");
// d : {
//        configurable: true,
//        enumerable: true,
//        value: 42,
//        writable: true
//      }

o = {};
Object.defineProperty(o, "machin", {
  value: 8675309,
  writable: false,
  enumerable: false,
});
d = Object.getOwnPropertyDescriptor(o, "machin");
// d : {
//        value: 8675309,
//        writable: false,
//        enumerable: false,
//        configurable: false
//      }

Notes

Pour ES5, si le premier argument de la méthode n'est pas un objet (mais une valeur d'un autre type), une exception TypeError sera levée. Pour ES2015, un argument non-objet sera d'abord converti en objet avant d'appliquer la méthode.

js
Object.getOwnPropertyDescriptor("toto", 0);
// TypeError: "toto" n'est pas un objet  // code ES5

// code ES2015
Object.getOwnPropertyDescriptor("toto", 0);
// {
//    configurable:false,
//    enumerable:true,
//    value:"f",
//    writable:false
// }

Spécifications

Specification
ECMAScript Language Specification
# sec-object.getownpropertydescriptor

Compatibilité des navigateurs

BCD tables only load in the browser

Voir aussi