--- title: Object.getOwnPropertyNames() slug: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames original_slug: Web/JavaScript/Referencia/Objetos_globales/Object/getOwnPropertyNames ---
El método Object.getOwnPropertyNames()
devuelve un array con todas las propiedades (numerables o no) encontradas en un objeto dado.
Object.getOwnPropertyNames(obj)
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 {{jsxref("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.
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 {{jsxref("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"] ) )
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);
Especificación | Status | Comentario |
---|---|---|
{{SpecName('ES5.1', '#sec-15.2.3.4', 'Object.getOwnPropertyNames')}} | {{Spec2('ES5.1')}} | Initial definition. Implemented in JavaScript 1.8.5 |
{{SpecName('ES6', '#sec-object.getownpropertynames', 'Object.getOwnPropertyNames')}} | {{Spec2('ES6')}} |
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 | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
Based on Kangax's compat table.
Object.getOwnPropertyNames
did not see unresolved properties of {{jsxref("Error")}} objects. This has been fixed in later versions ({{bug("724768")}}).