Esta traducción está incompleta. Por favor, ayuda a traducir este artículo del inglés.
Resumen
El método Object.keys() devuelve un arreglo de las propiedades enumerables de un objeto dado, en el mismo orden que el que provee la iteración for...in
(La diferencia radica en que el bulce for-in enumera las propiedades en la cadena prototipo).
Sintaxis
Object.keys(obj)
Parámetros
obj
- El objeto cuyas propiedades enumerables serán devueltas.
Descripción
Object.keys
devuelve un arreglo cuyos elementos son strings correspondientes a las propiedades enumerables que seencuentran 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'] // array like object var obj = { 0: 'a', 1: 'b', 2: 'c' }; console.log(Object.keys(obj)); // console: ['0', '1', '2'] // array like object with random key ordering var an_obj = { 100: 'a', 2: 'b', 7: 'c' }; console.log(Object.keys(an_obj)); // console: ['2', '7', '100'] // getFoo is property which isn't 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 ES6, un argumento no-objeto será coaccionado hacia un objeto.
> Object.keys("foo") TypeError: "foo" is not an object // código ES5 > Object.keys("foo") ["0", "1", "2"] // código ES
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 | Comentario |
---|---|---|
ECMAScript 5.1 (ECMA-262) The definition of 'Object.keys' in that specification. |
Standard | Definición inicial. Implementado en JavaScript 1.8.5. |
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Object.keys' in that specification. |
Standard |
Compatibilidad con navegadores
Funcionalidad | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Soporte básico | 5 | 4.0 (2.0) | 9 | 12 | 5 |
Funcionalidad | Android | Chrome para Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Soporte básico | ? | ? | ? | ? | ? | ? |
Basado en la tabla de compatibilidad de Kangax.