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 : 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

js
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.

js
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()

js
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 :

js
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.

js
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