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) |