Como posso verificar se um objeto tem uma propriedade específica em JavaScript?

Como posso verificar se um objeto tem uma propriedade específica em JavaScript?

Considere:

x = {'key': 1};
if ( x.hasOwnProperty('key') ) {
    //Do this
}

Essa é a melhor maneira de o fazer?

if (x.key !== undefined)

Armin Ronacher parece que já me venceu, mas:

Object.prototype.hasOwnProperty = function(property) {
    return this[property] !== undefined;
};

x = {'key': 1};

if (x.hasOwnProperty('key')) {
    alert('have key!');
}

if (!x.hasOwnProperty('bar')) {
    alert('no bar!');
}

Uma solução mais segura, mas mais lenta, como apontado por Konrad Rudolph e Armin Ronacher seria:

Object.prototype.hasOwnProperty = function(property) {
    return typeof this[property] !== 'undefined';
};
Comentários (4)

Sim, é :) Eu acho que você também pode fazer Object.prototype.hasOwnProperty.call(x, 'key') que também deve funcionar se x tiver uma propriedade chamada hasOwnProperty :)

Mas isso testa as próprias propriedades. Se você quiser verificar se ele tem uma propriedade que também pode ser herdada você pode usar typeof x.foo != 'undefined'.

Comentários (0)

OK, parece que eu tinha a resposta certa, a menos que você não'não queira propriedades herdadas:

if (x.hasOwnProperty('key'))

Aqui estão algumas outras opções para incluir as propriedades herdadas:

if (x.key) // Quick and dirty, but it does the same thing as below.

if (x.key !== undefined)
Comentários (3)