Apply your JS skills to key Mozilla projects as an MDN Fellow! http://mzl.la/MDNFellowship

mozilla
Vos résultats de recherche

    Object.keys()

    Résumé

    La méthode Object.keys() renvoie un tableau des propriétés propres à un objet (qui ne sont pas héritées via la chaîne de prototypes) et qui sont énumérables. L'ordre de ce tableau est le même que celui obtenu par une boucle for...in  (à la différence q'une boucle for-in liste également les propriétés héritées).

    Syntaxe

    Object.keys(obj)

    Paramètres

    obj
    L'objet dont on souhaite lister les propriétés propres et énumérables.

    Description

    Object.keys renvoie un tableau dont les éléments sont les chaînes de caractères des noms des propriétés propres et énumérables d'obj. L'ordre des propriétés obtenu est le même que celui obtenu lorsqu'on boucle manuellement sur les propriétés de l'objet.

    Exemples

    var arr = ["a", "b", "c"];
    console.log(Object.keys(arr)); // affichera ['0', '1', '2']
    
    // un objet semblable à un tableau
    var obj = { 0 : "a", 1 : "b", 2 : "c"};
    console.log(Object.keys(obj)); // affichera ['0', '1', '2']
    
    // un objet semblable à un tableau avec un ordre de clé aléatoire
    var an_obj = { 100: "a", 2: "b", 7: "c"};
    console.log(Object.keys(an_obj)); // affichera ['2', '7', '100']
    
    // getToto est une propriété non énumérable 
    var monObjet = Object.create({}, { getToto : { value : function () { return this.toto } } });
    monObjet.toto = 1;
    
    console.log(Object.keys(monObjet)); // affichera ['toto']
    

    Si on souhaite lister toutes les propriétés, y compris celles qui ne sont pas énumérables, on pourra utiliser Object.getOwnPropertyNames().

    Notes

    Pour ES5, si l'argument passé à la méthode n'est pas un objet mais une valeur d'un autre type primitif, cela entraînera une exception TypeError. Pour ES6, un argument qui n'est pas un objet sera d'abord converti en objet.

    > Object.keys("toto")
    TypeError: "toto" n'est pas un objet // code ES5
    
    > Object.keys("toto")
    ["0", "1", "2"]                   // code ES6

    Prothèse d'émulation (polyfill)

    Afin d'ajouter Object.keys aux environnements moins récents qui ne supporterait pas la méthode de façon native, on peut utiliser le fragment de code suivant :

    // De MDN - https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/keys
    if (!Object.keys) {
      Object.keys = (function () {
        'use strict';
        var hasOwnProperty = Object.prototype.hasOwnProperty,
            hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
            dontEnums = [
              'toString',
              'toLocaleString',
              'valueOf',
              'hasOwnProperty',
              'isPrototypeOf',
              'propertyIsEnumerable',
              'constructor'
            ],
            dontEnumsLength = dontEnums.length;
    
        return function (obj) {
          if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
            throw new TypeError('Object.keys called on non-object');
          }
    
          var result = [], prop, i;
    
          for (prop in obj) {
            if (hasOwnProperty.call(obj, prop)) {
              result.push(prop);
            }
          }
    
          if (hasDontEnumBug) {
            for (i = 0; i < dontEnumsLength; i++) {
              if (hasOwnProperty.call(obj, dontEnums[i])) {
                result.push(dontEnums[i]);
              }
            }
          }
          return result;
        };
      }());
    }
    

    On notera que le code ci-dessus comporte les clés non énumérables pour IE7 (et éventuellement IE8), quand l'objet est passé à une fenêtre différente.

    Pour d'autres exemples d'émulation (polyfill), voir l'article Javascript - Object.keys Browser Compatibility (en anglais).

    Spécifications

    Spécification Statut Commentaires
    ECMAScript 5.1 (ECMA-262)
    La définition de 'Object.keys' dans cette spécification.
    Standard Définition initiale.
    Implémentée avec JavaScript 1.8.5
    ECMAScript 6 (ECMA-262)
    La définition de 'Object.keys' dans cette spécification.
    En cours de validation comme recommandation  

    Compatibilité des navigateurs

    Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari
    Support simple 5 4.0 (2.0) 9 12 5
    Fonctionnalité Android Chrome pour Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
    Support simple ? ? ? ? ? ?

    Tableau basé sur le tableau de compatibilité de Kangax.

    Voir aussi

    Étiquettes et contributeurs liés au document

    Contributors to this page: Assitan, cdr, riplay777, SphinxKnight
    Dernière mise à jour par : riplay777,