Object : méthode statique getOwnPropertyNames()
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.getOwnPropertyNames() retourne un tableau contenant toutes les propriétés (y compris les propriétés non-énumérables, sauf celles utilisant Symbol) trouvées directement dans un objet donné.
Exemple interactif
const object = {
a: 1,
b: 2,
c: 3,
};
console.log(Object.getOwnPropertyNames(object));
// Résultat attendu : Array ["a", "b", "c"]
Syntaxe
Object.getOwnPropertyNames(obj)
Paramètres
obj-
L'objet dont sont listées les propriétés propres énumérables et non-énumérables.
Valeur de retour
Un tableau de chaînes de caractères qui sont les noms des propriétés propres (celles directement rattachées à l'objet) de l'objet passé en argument.
Description
Object.getOwnPropertyNames retourne un tableau dont les éléments sont des chaînes de caractères correspondant aux noms des propriétés énumérables et non-énumérables appartenant directement à l'objet obj. L'ordre des propriétés énumérables est cohérent avec l'ordre utilisé dans une boucle for...in (ou avec Object.keys) parmi les propriétés de l'objet. Les clés entières non négatives de l'objet (à la fois énumérables et non-énumérables) sont ajoutées en premier dans le tableau par ordre croissant, suivies des clés de type chaîne de caractères dans l'ordre d'insertion.
Dans ES5, si l'argument passé à cette méthode n'est pas un objet (un primitif), cela provoque une TypeError. Dans ES2015, un argument non-objet est converti en objet.
Object.getOwnPropertyNames("toto");
// TypeError: "toto" n'est pas un objet (code ES5)
Object.getOwnPropertyNames("foo");
// ["0", "1", "2", "length"] (code ES2015)
Exemples
Utiliser Object.getOwnPropertyNames()
const arr = ["a", "b", "c"];
console.log(Object.getOwnPropertyNames(arr).sort());
// ["0", "1", "2", "length"]
// Objet semblable à un tableau
const obj = { 0: "a", 1: "b", 2: "c" };
console.log(Object.getOwnPropertyNames(obj).sort());
// ["0", "1", "2"]
Object.getOwnPropertyNames(obj).forEach((val, idx, array) => {
console.log(`${val} -> ${obj[val]}`);
});
// 0 -> a
// 1 -> b
// 2 -> c
// propriété non-énumérable
const monObj = Object.create(
{},
{
getToto: {
value() {
return this.toto;
},
enumerable: false,
},
},
);
monObj.toto = 1;
console.log(Object.getOwnPropertyNames(monObj).sort()); // ["toto", "getToto"]
Si vous souhaitez n'obtenir que les propriétés énumérables, consultez Object.keys() ou utilisez une boucle for...in (notez que ça retourne également les propriétés énumérables trouvées le long de la chaîne de prototypes pour l'objet à moins que cette dernière ne soit filtrée avec Object.hasOwn()).
Les éléments de la chaîne de prototypes ne sont pas listés :
function ClasseParente() {}
ClasseParente.prototype.inheritedMethod = function () {};
function ClasseEnfant() {
this.prop = 5;
this.method = function () {};
}
ClasseEnfant.prototype = new ClasseParente();
ClasseEnfant.prototype.prototypeMethod = function () {};
console.log(Object.getOwnPropertyNames(new ClasseEnfant()));
// ["prop", "method"]
Obtenir uniquement les propriétés non-énumérables
On utilise ici la fonction Array.prototype.filter() pour retirer les clés énumérables (obtenus avec Object.keys()) de la liste de toutes les clés (obtenues avec Object.getOwnPropertyNames()) afin de n'avoir que les propriétés propres non-énumérables.
const cible = myObject;
const enumEtNonEnum = Object.getOwnPropertyNames(cible);
const enumSeulement = new Set(Object.keys(cible));
const nonEnumSeulement = enumEtNonEnum.filter((key) => !enumSeulement.has(key));
console.log(nonEnumSeulement);
Spécifications
| Spécification |
|---|
| ECMAScript® 2027 Language Specification # sec-object.getownpropertynames |
Compatibilité des navigateurs
Voir aussi
- La prothèse d'émulation de
Object.getOwnPropertyNamesdanscore-js(angl.) - Énumérable et rattachement des propriétés
- La méthode statique
Object.hasOwn() - La méthode
Object.prototype.propertyIsEnumerable() - La méthode statique
Object.create() - La méthode statique
Object.keys() - La méthode
Array.prototype.forEach()