Как да проверя дали даден обект има определено свойство в JavaScript?
Помислете:
x = {'key': 1};
if ( x.hasOwnProperty('key') ) {
//Do this
}
Това ли е най-добрият начин да го направим?
if (x.key !== undefined)
Армин Ронахер изглежда вече ме е изпреварил, но:
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!');
}
По-безопасно, но по-бавно решение, както е посочено от Конрад Рудолф и Армин Ронахер, би било:
Object.prototype.hasOwnProperty = function(property) {
return typeof this[property] !== 'undefined';
};
Да, така е :) Мисля, че можеш да направиш и Object.prototype.hasOwnProperty.call(x, 'key')
, което също би трябвало да работи, ако x
има свойство, наречено hasOwnProperty
:)
Но това е тест за собствени свойства. Ако искате да проверите дали има свойство, което също може да бъде наследено, можете да използвате typeof x.foo != 'undefined'
.
Добре, изглежда, че имах правилния отговор, освен ако не искате да наследявате свойства:
if (x.hasOwnProperty('key'))
Ето някои други възможности за включване на наследени свойства:
if (x.key) // Quick and dirty, but it does the same thing as below.
if (x.key !== undefined)