如何检查对象在JavaScript中是否具有特定属性?
考虑:
x = {'key': 1};
if ( x.hasOwnProperty('key') ) {
//Do this
}
那是最好的方法吗?
#1楼
随着Underscore.js
或( 甚至更好 ) lodash
:
_.has(x, 'key');
该方法调用Object.prototype.hasOwnProperty
,但(a)的类型较短,并且(b)使用“对hasOwnProperty
的安全引用”(即,即使hasOwnProperty
被覆盖也可以使用)。
特别是lodash将_.has
定义为:
function has(object, key) {
return object ? hasOwnProperty.call(object, key) : false;
}
// hasOwnProperty = Object.prototype.hasOwnProperty
#2楼
是的,它是:)我想您也可以执行Object.prototype.hasOwnProperty.call(x, 'key')
,如果x
具有一个名为hasOwnProperty
的属性,它也应该可以工作:)
但这会测试自己的属性。 如果要检查它是否具有也可以继承的属性,可以使用typeof x.foo != 'undefined'
。
#3楼
if (x.key !== undefined)
Armin Ronacher似乎已经击败了我 ,但是:
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!');
}
Konrad Rudolph和Armin Ronacher 指出 ,一种更安全但较慢的解决方案是:
Object.prototype.hasOwnProperty = function(property) {
return typeof this[property] !== 'undefined';
};
#4楼
好的,除非您不想继承属性,否则我的答案似乎正确:
if (x.hasOwnProperty('key'))
以下是一些其他选项来包含继承的属性:
if (x.key) // Quick and dirty, but it does the same thing as below.
if (x.key !== undefined)
#5楼
if (typeof x.key != "undefined") {
}
因为
if (x.key)
如果x.key
解析为false
则失败(例如, x.key = ""
)。