如何检查对象在JavaScript中是否具有特定属性?

﹥>﹥吖頭↗ 提交于 2019-12-09 11:32:32

如何检查对象在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 RudolphArmin 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 = "" )。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!