Hoe controleer ik of een object een bepaalde eigenschap heeft in JavaScript?

Hoe controleer ik of een object een bepaalde eigenschap heeft in JavaScript?

Denk eens na:

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

Is dat de beste manier om het te doen?

if (x.key !== undefined)

Armin Ronacher heeft me blijkbaar al voor, maar:

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!');
}

Een veiliger, maar langzamere oplossing, zoals aangegeven door Konrad Rudolph en Armin Ronacher zou zijn:

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

Ja dat is zo :) Ik denk dat je ook Object.prototype.hasOwnProperty.call(x, 'key') kunt doen, wat ook zou moeten werken als x een eigenschap genaamd hasOwnProperty heeft :)

Maar dat test op eigen eigenschappen. Als je wilt controleren of het een eigenschap heeft die ook geërfd kan worden kun je typeof x.foo != 'undefined' gebruiken.

Commentaren (0)

OK, het lijkt erop dat ik het juiste antwoord had, tenzij je geen geërfde eigenschappen wilt:

if (x.hasOwnProperty('key'))

Hier zijn enkele andere opties om geërfde eigenschappen op te nemen:

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

if (x.key !== undefined)
Commentaren (3)