MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

Object.prototype.hasOwnProperty()

O método hasOwnProperty() retorna um booleano indicando se o objeto tem a propriedade especificada.

Sintaxe

obj.hasOwnProperty(prop)

Parâmetros

prop
O nome da propriedade para testar.

Descrição

Cada objecto descendente de Object herda o método hasOwnProperty. Este método pode ser usado para determinar se um objecto contém a propriedade especificada como uma propriedade direta desse objeto; ao contrário do operador in, este método não verifica a cadeia de objetos do protótipo.

Exemplos

Usando hasOwnProperty para testar a existência de uma propriedade

O seguinte exemplo determina se o objecto "o" contém a propriedade "prop":

o = new Object();
o.prop = 'existe';

function changeO() {
  o.newprop = o.prop;
  delete o.prop;
}

o.hasOwnProperty('prop');   // retorna true
changeO();
o.hasOwnProperty('prop');   // retorna false

Direto versus propriedades herdadas

O seguinte exemplo diferencia entre propriedades diretas e propriedades herdadas através da cadeia de protótipos:

o = new Object();
o.prop = 'existe';
o.hasOwnProperty('prop');             // retorna true
o.hasOwnProperty('toString');         // retorna false
o.hasOwnProperty('hasOwnProperty');   // retorna false

Iteração entre as propriedades de um objeto

O seguinte exemplo mostra como iterar entre as propriedades de um objeto sem executar em propriedades herdadas. Note que o ciclo for...in  já está apenas repetindo itens enumeráveis então um não devia assumir baseado na falta de propriedades não-enumeráveis mostrado no ciclo que hasOwnProperty em si é estritamente limitado aos itens enumeráveis (como com Object.getOwnPropertyNames()).

var buz = {
  fog: 'stack'
};

for (var name in buz) {
  if (buz.hasOwnProperty(name)) {
    console.log('Isto é fog (' + name + ') com certeza. Valor: ' + buz[name]);
  }
  else {
    console.log(name); // toString ou outra coisa
  }
}

Usando hasOwnProperty como um nome de uma propriedade

JavaScript não protege a propriedade hasOwnProperty; assim, se a possibilidade existe de um objeto poder ter uma propriedade com este nome, é necessário usar um hasOwnProperty externo para obter resultados corretos:

var foo = {
  hasOwnProperty: function() {
    return false;
  },
  bar: 'Aqui os dragões'
};

foo.hasOwnProperty('bar'); // sempre retornará false

// Use outro objeto hasOwnProperty e chame-o com 'this' definido como foo
({}).hasOwnProperty.call(foo, 'bar'); // true

// É também possível usar a propriedade hasOwnProperty através do protótipo do objeto para este propósito
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true

Note que no último caso, não há objetos recém-criados.

Especificações

Especificação Estado Comentário
ECMAScript 3rd Edition (ECMA-262) Standard Definição inicial. Implementado em JavaScript 1.5.
ECMAScript 5.1 (ECMA-262)
The definition of 'Object.prototype.hasOwnProperty' in that specification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Object.prototype.hasOwnProperty' in that specification.
Standard  

Compatibilidade entre browsers

Característica Chrome Firefox (Gecko) Internet Explorer Opera Safari
Suporte básico (Yes) (Yes) (Yes) (Yes) (Yes)
Característica Android Chrome para Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Suporte básico (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

Veja também

Etiquetas do documento e contribuidores

 Contribuidores para esta página: gabrielpconceicao
 Última atualização por: gabrielpconceicao,