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