Object.keys()

Resumen

El m茅todo Object.keys() devuelve un array de las propiedades names de un objeto, en el mismo orden como se obtienen en un loop normal

Sintaxis

Object.keys(obj)

Par谩metros

obj
El objeto cuyas propiedades enumerables ser谩n devueltas.

Valor de retorno

Un array de strings que representan toda las propiedades  del objeto

Descripci贸n

Object.keys devuelve un array cuyos elementos son strings correspondientes a las propiedades enumerables que se encuentran directamente en el object. El orden de las propiedades es el mismo que se proporciona al iterar manualmente sobre las propiedades del objeto.

Ejemplos

var arr = ['a', 'b', 'c'];
console.log(Object.keys(arr)); // console: ['0', '1', '2']

// arreglo como objeto
var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.keys(obj)); // console: ['0', '1', '2']

// arreglo como objeto con nombres ordenados aleatoriamente
var an_obj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.keys(an_obj)); // console: ['2', '7', '100']

// getFoo es una propiedad no enumerable
var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; } } });
my_obj.foo = 1;

console.log(Object.keys(my_obj)); // console: ['foo']

Si quieres todas las propiedades, incluso las no enumerables, mira Object.getOwnPropertyNames().

Notas

En ES5, si el argumento para este m茅todo no es un objeto (uno primitivo), causar谩 un TypeError (en-US). En ES2015, un argumento no-objeto ser谩 coaccionado hacia un objeto.

> Object.keys("foo")
// TypeError: "foo" is not an object  (ES5)

> Object.keys("foo")
// ["0", "1", "2"]                    (ES2015)

Polyfill

Para a帽adir soporte Object.keys en entornos m谩s antiguos que no lo soportan de forma nativa, copia el siguiente fragmento:

// De https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/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;
    };
  }());
}

Ten en cuenta que el c贸digo anterior incluye claves no-enumerables en IE7 (y quiz谩s IE8), al pasar en un objeto desde una ventana diferente.

Para un simple Polyfill del Navegador, mira Javascript - Compatibilidad de Object.keys en Navegadores.

Especificaciones

Especificaci贸n Estado Comentarios
ECMAScript 5.1 (ECMA-262)
La definici贸n de 'Object.keys' en esta especificaci贸n.
Standard Definici贸n inicial. Implementado en JavaScript 1.8.5.
ECMAScript 2015 (6th Edition, ECMA-262)
La definici贸n de 'Object.keys' en esta especificaci贸n.
Standard
ECMAScript (ECMA-262)
La definici贸n de 'Object.keys' en esta especificaci贸n.
Living Standard

Compatibilidad con navegadores

BCD tables only load in the browser

Mira tambi茅n