Please note, this is a STATIC archive of website developer.mozilla.org from November 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Object.getOwnPropertyNames()

Este artigo necessita de uma revisão editorial. Como posso ajudar.

Esta tradução está incompleta. Ajude atraduzir este artigo.

O método Object.getOwnPropertyNames() retorna um vetor com todas as propriedades (enumeráveis ou não) encontradas diretamente em um dado objeto.

Sintaxe

Object.getOwnPropertyNames(obj)

Parâmetros

obj
O objeto, cujas suas próprias propreidades, enumeráveis ou não, serão retornadas.

Descrição

Object.getOwnPropertyNames() returna um vetor cujo elementos são strings correndentes as propriedades enumeráveis ou não, encontradas em obj. A ordem das propriedades enumeráveis no vetor é consistente com a ordenação exposta por um laço  for...in (ou por Object.keys()) nas propriedades do objeto. A ordenção das propriedades não-enumeráveis no vetor, e entre as propriedades enumeráveis, não está definida.

Exemplos

Usando Object.getOwnPropertyNames()

var arr = ['a', 'b', 'c'];
console.log(Object.getOwnPropertyNames(arr).sort()); 
// logs ["0", "1", "2", "length"]

// Array-like object
var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.getOwnPropertyNames(obj).sort()); 
// logs ["0", "1", "2"]

// Logging property names and values using Array.forEach
Object.getOwnPropertyNames(obj).forEach(function(val, idx, array) {
  console.log(val + ' -> ' + obj[val]);
});
// logs
// 0 -> a
// 1 -> b
// 2 -> c

// non-enumerable property
var my_obj = Object.create({}, {
  getFoo: {
    value: function() { return this.foo; },
    enumerable: false
  }
});
my_obj.foo = 1;

console.log(Object.getOwnPropertyNames(my_obj).sort()); 
// logs ["foo", "getFoo"]

Se voce quer somente as propriedades enumeráveis, veja Object.keys() ou use um laço for...in (contudo, note que isto irá retornar propriedades enumeráveis não encontradas diretamente naquele objeto, mas também junto com a cadeia prototype do objeto a menos que o último seja filtrado com hasOwnProperty()).

Ítens na cadeia prototype não são listados:

function ParentClass() {}
ParentClass.prototype.inheritedMethod = function() {};

function ChildClass() {
  this.prop = 5;
  this.method = function() {};
}
ChildClass.prototype = new ParentClass;
ChildClass.prototype.prototypeMethod = function() {};

console.log(
  Object.getOwnPropertyNames(
    new ChildClass() // ["prop", "method"]
  )
);

Obtenha somente não-enumeráveis

Isto usa a função Array.prototype.filter() para remover as chaves enumeráveis (obtidas com Object.keys()) de uma lista com todas as chaves (obtidas com Object.getOwnPropertyNames()) deixando somente as chaves não-enumeráveis.

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) {
    // not found in enum_only keys mean the key is non-enumerable,
    // so return true so we keep this in the filter
    return true;
  } else {
    return false;
  }
});

console.log(nonenum_only);

Notas

Em ES5, se o argumento desse método não é um objeto (um tipo primitivo), então isso causará um TypeError. Em ES6, um argumento diferente de objeto será transformado em um objeto.

Object.getOwnPropertyNames('foo');
// TypeError: "foo" is not an object (ES5 code)

Object.getOwnPropertyNames('foo');
// ["0", "1", "2", "length"]  (ES6 code)

Especificações

Esperificação Status Comentário
ECMAScript 5.1 (ECMA-262)
The definition of 'Object.getOwnPropertyNames' in that specification.
Standard

Definição inicial. Implementado em JavaScript 1.8.5.

ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Object.getOwnPropertyNames' in that specification.
Standard  
ECMAScript 2017 Draft (ECMA-262)
The definition of 'Object.getOwnPropertyNames' in that specification.
Draft  

Compatibilidade em navegadores

Característica Chrome Firefox (Gecko) Internet Explorer Opera Safari
Suporte básico 5 4.0 (2) 9 12 5
Característica Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Suporte básico ? ? ? ? ? ?

Notas específicas para SpiderMonkey

Antes do SpiderMonkey 28 (Firefox 28 / Thunderbird 28 / SeaMonkey 2.25 / Firefox OS 1.3), Object.getOwnPropertyNames não via propriedades não resolvidas de objetos Error. Isto foi resolvido em versões posteriores (bug 724768).

Veja também

Etiquetas do documento e colaboradores

 Colaboradores desta página: deyvidyury
 Última atualização por: deyvidyury,