Object.prototype.hasOwnProperty()

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)

Veja Também

Etiquetas do documento e colaboradores

 Colaboradores desta página: KennyMack, teoli, gigaPaul
 Última atualização por: KennyMack,