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