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