Object : méthode statique getOwnPropertyDescriptor()
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 juillet 2015.
La méthode statique Object.getOwnPropertyDescriptor() retourne un objet décrivant la configuration d'une propriété spécifique sur un objet donné (c'est-à-dire une propriété directement présente sur un objet et non dans la chaîne de prototypes de l'objet). L'objet retourné est mutable, mais le modifier n'a aucun effet sur la configuration de la propriété originale.
Exemple interactif
const object = {
foo: 42,
};
const descriptor = Object.getOwnPropertyDescriptor(object, "foo");
console.log(descriptor.configurable);
// Résultat attendu : true
console.log(descriptor.value);
// Résultat attendu : 42
Syntaxe
Object.getOwnPropertyDescriptor(obj, prop)
Paramètres
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'examiner la description précise d'une propriété. Une propriété en JavaScript se compose soit d'un nom de type chaîne de caractères, soit d'un Symbol et d'un descripteur de propriété. Des informations supplémentaires sur les types de descripteurs de propriété et leurs attributs peuvent être trouvées dans Object.defineProperty().
Un descripteur de propriété est un enregistrement avec certains des attributs suivants :
value-
La valeur associée à la propriété (uniquement pour les descripteurs de données).
writable-
truesi et seulement si la valeur associée à la propriété peut être modifiée (uniquement pour les descripteurs de données). get-
Une fonction qui sert d'accesseur pour la propriété, ou
undefineds'il n'y a pas d'accesseur (uniquement pour les descripteurs d'accesseur). set-
Une fonction qui sert de mutateur pour la propriété, ou
undefineds'il n'y a pas de mutateur (uniquement pour les descripteurs d'accesseur). configurable-
truesi et seulement si le type de ce descripteur de propriété peut être modifié et si la propriété peut être supprimée de l'objet correspondant. enumerable-
truesi et seulement si cette propriété apparaît lors de l'énumération des propriétés de l'objet correspondant.
Exemples
let o, d;
o = {
get toto() {
return 17;
},
};
d = Object.getOwnPropertyDescriptor(o, "toto");
console.log(d);
// {
// configurable: true,
// enumerable: true,
// get: [Function: get toto],
// set: undefined
// }
o = { truc: 42 };
d = Object.getOwnPropertyDescriptor(o, "truc");
console.log(d);
// {
// configurable: true,
// enumerable: true,
// value: 42,
// writable: true
// }
o = { [Symbol.for("machin")]: 73 };
d = Object.getOwnPropertyDescriptor(o, Symbol.for("machin"));
console.log(d);
// {
// configurable: true,
// enumerable: true,
// value: 73,
// writable: true
// }
o = {};
Object.defineProperty(o, "bidule", {
value: 8675309,
writable: false,
enumerable: false,
});
d = Object.getOwnPropertyDescriptor(o, "bidule");
console.log(d);
// {
// value: 8675309,
// writable: false,
// enumerable: false,
// configurable: false
// }
Convertir les valeurs qui ne sont pas des objets
Dans ES5, si le premier argument de cette méthode n'est pas un objet (une valeur primitive), alors il provoque une TypeError. Dans ES2015, un premier argument qui n'est pas un objet est d'abord converti en objet.
Object.getOwnPropertyDescriptor("toto", 0);
// TypeError: "toto" n'est pas un objet // code ES5
Object.getOwnPropertyDescriptor("toto", 0);
// Object retourné par le code ES2015 : {
// configurable: false,
// enumerable: true,
// value: "f",
// writable: false
// }
Spécifications
| Spécification |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.getownpropertydescriptor> |
Compatibilité des navigateurs
Voir aussi
- La méthode statique
Object.defineProperty() - La méthode statique
Reflect.getOwnPropertyDescriptor()