Resumo
O método hasOwnProperty()
retorna um boolean indicando se o objeto possui a propriedade especificada.
Síntaxe
obj.hasOwnProperty(prop)
Parâmetros
prop
- O nome da propriedade.
Descrição
Todo objeto descendente de Object
herda o método hasOwnProperty
. Este método pode ser usado para determinar se um objeto possui a propriedade especificada como propriedade direta do objeto, diferente do operador in
, este método não checa a cadeia prototype do objeto.
Exemplos
Exemplo: Usando hasOwnProperty
para testar a existência da propriedade
O seguinte exemplo determina se o objeto possui uma propriedade com o nome prop:
o = new Object(); o.prop = 'exists'; function changeO() { o.newprop = o.prop; delete o.prop; } o.hasOwnProperty('prop'); // Retorna true changeO(); o.hasOwnProperty('prop'); // Retorna false
Exemplo: Direto vs Herdado
O seguinte exemplo diferencia entre propriedade diretas e propriedade hendadas da cadeia prototype:
o = new Object(); o.prop = 'exists'; o.hasOwnProperty('prop'); // Retorna true o.hasOwnProperty('toString'); // Retorna false o.hasOwnProperty('hasOwnProperty'); // Retorna false
Exemplo: Percorrer através das propriedades do um objeto
O seguinte exemplo mostra como percorrer as propriedade de um objeto sem executar as propriedade herdadas. Observe que o for..in loop somente percorre os itens enumerable, então como base vamos assumir que não haja propriedades non-enumerable no loop, o hasOwnProperty esta restrito a itens enumerable (como em Object.getOwnPropertyNames()
).
var buz = { fog: 'stack' }; for (var name in buz) { if (buz.hasOwnProperty(name)) { alert("this is fog (" + name + ") for sure. Value: " + buz[name]); } else { alert(name); // toString ou qualquer outra coisa } }
Exemplo: hasOwnProperty
como propriedade
JavaScript não protege o nome hasOwnProperty
, assim, se existir a possibilidade do objeto possuir uma propriedade com esse nome, é necessário usar externamente hasOwnProperty
para se ter o resultado correto:
var foo = { hasOwnProperty: function() { return false; }, bar: 'Here be dragons' }; foo.hasOwnProperty('bar'); // Sempre retorna false // Usando a propriedade hasOwnProperty de outro objeto e definindo 'this' como foo ({}).hasOwnProperty.call(foo, 'bar'); // true // Também é possível usar hasOwnProperty do objeto Object.prototype.hasOwnProperty.call(foo, 'bar'); // true
Observe que neste ultimo caso nenhum novo objeto é criado.
Especificações
Especificação | Status | Comentário |
---|---|---|
ECMAScript 3rd Edition. Implemented in JavaScript 1.5 | Standard | Definição inicial. |
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 nos navegadores
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |