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

Compatibilidade entre browsers

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!
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