We're looking for a user researcher to understand the needs of developers and designers. Is this you or someone you know? Check out the post: https://mzl.la/2IGzdXS

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.
Padrão  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Object.prototype.hasOwnProperty' in that specification.
Padrão  

Compatibilidade nos navegadores

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

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,