Object.keys()

El método estático Object.keys() devuelve un arreglo de propiedades enumerables propias de un objeto dado.

Pruébalo

Sintaxis

js
Object.keys(obj)

Parámetros

obj

Un objeto.

Valor devuelto

Un arreglo de strings que representan todas las propiedades del objeto.

Descripción

Object.keys devuelve un arreglo cuyos elementos son cadenas correspondientes a las propiedades enumerables que se encuentran directamente en el object. Esto es lo mismo que iterar con un bucle for...in, excepto que un bucle for...in también enumera las propiedades en la cadena de prototipo. El orden del arreglo devuelto por Object.keys() es el mismo que proporciona el bucle for...in.

Si necesita los valores de la propiedad, use Object.values() en su lugar. Si necesita ambos las claves de la propiedad como sus valores, use Object.entries() en su lugar

Ejemplos

Usando Object.keys()

js
// Arreglo sencillo
const arr = ["a", "b", "c"];
console.log(Object.keys(arr)); // ['0', '1', '2']

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

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

// getFoo es una propiedad no enumerable
const myObj = Object.create(
  {},
  {
    getFoo: {
      value() {
        return this.foo;
      },
    },
  },
);
myObj.foo = 1;
console.log(Object.keys(myObj)); // ['foo']

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

Usando Object.keys() en primitivos

Los argumentos que no son objetos son objetos forzados. Únicamente las cadenas pueden tener propiedades enumerables propias, mientras que todas las demás primitivas devuelven un arreglo vacío.

js
// Las cadenas de texto tienen índices como propiedades propias enumerables
console.log(Object.keys("foo")); // ['0', '1', '2']

// Otros primitivos no tienen propiedas propias
console.log(Object.keys(100)); // []

Nota: En ES5, si el argumento para Object.keys() no es un objeto, causará TypeError.

Especificaciones

Specification
ECMAScript Language Specification
# sec-object.keys

Compatibilidad con navegadores

BCD tables only load in the browser

Véase también