Esta traducción está incompleta. Por favor, ayuda a traducir este artículo del inglés.
Resumen
El método Object.getOwnPropertyNames()
devuelve un array con todas las propiedades (numerables o no) encontradas en un objeto dado.
Sintaxis
Object.getOwnPropertyNames(obj)
Parámetros
- obj
- El objeto cuyas propiedades directas, numerables y no-numerables, serán devueltas.
Descripción
Object.getOwnPropertyNames
devuelve un array cuyos elementos son strings correspondientes a cada una de las propiedades encontradas directamente en obj
. El orden de las propiedades numerables en el array coincide con el expuesto para for...in loop (o para Object.keys
) con respecto a las propiedades del object. El orden de las propiedades no-numerables del array, y de éstas respecto a las numerables, no está definido.
Ejemplos
var arr = ["a", "b", "c"]; print(Object.getOwnPropertyNames(arr).sort()); // imprime "0,1,2,length" // Objeto similar a Array var obj = { 0: "a", 1: "b", 2: "c"}; print(Object.getOwnPropertyNames(obj).sort()); // imprime "0,1,2" // Imprime nombres de variables y valores usando Array.forEach Object.getOwnPropertyNames(obj).forEach(function(val, idx, array) { print(val + " -> " + obj[val]); }); // imprime // 0 -> a // 1 -> b // 2 -> c // propiedad no-numerable var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; }, enumerable: false } }); my_obj.foo = 1; print(Object.getOwnPropertyNames(my_obj).sort()); // imprime "foo, getFoo"
Si se quiere solo las propiedades numerables, ver Object.keys
o usar un for...in loop (aunque esto devolvería propiedades numerables no directas del objeto pertenecientes a la cadena de prototype a la que pertenezca, a menos que finalmente se filtre con hasOwnProperty()).
Items de la cadena prototype no se listan:
function ParentClass () { } ParentClass.prototype.inheritedMethod = function () { }; function ChildClass () { this.prop = 5; this.method = function () {}; } ChildClass.prototype = new ParentClass; ChildClass.prototype.prototypeMethod = function () { }; alert( Object.getOwnPropertyNames( new ChildClass() // ["prop", "method"] ) )
Get Non-Enumerable Only
Aquí se usa la función Array.prototype.filter para quitar las keys numerables (obtenidas con Object.keys) de una lista con todas las keys (obtenida con Object.getOwnPropertynames) dejando solo las no-numerables.
var target = myObject; var enum_and_nonenum = Object.getOwnPropertyNames(target); var enum_only = Object.keys(target); var nonenum_only = enum_and_nonenum.filter(function(key) { var indexInEnum = enum_only.indexOf(key) if (indexInEnum == -1) { //no encontrada en las keys de enum_only, por lo que se trata de una key numerable, se devuelve true para mantenerla en filter return true; } else { return false; } }); console.log(nonenum_only);
Especificaciones
Especificación | Status | Comentario |
---|---|---|
ECMAScript 5.1 (ECMA-262) The definition of 'Object.getOwnPropertyNames' in that specification. |
Standard | Initial definition. Implemented in JavaScript 1.8.5 |
ECMAScript 6 (ECMA-262) The definition of 'Object.getOwnPropertyNames' in that specification. |
Release Candidate |
Compatibilidad con Navegadores
Feature | Firefox (Gecko) | Chrome | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | 4 (2.0) | 5 | 9 | 12 | 5 |
Feature | Firefox Mobile (Gecko) | Android | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|
Basic support | ? | ? | ? | ? | ? |
Based on Kangax's compat table.
SpiderMonkey-specific notes
- Prior to SpiderMonkey 28 (Firefox 28 / Thunderbird 28 / SeaMonkey 2.25 / Firefox OS 1.3),
Object.getOwnPropertyNames
did not see unresolved properties ofError
objects. This has been fixed in later versions (bug 724768).