如何檢查對象在JavaScript中是否具備特定屬性?

如何檢查對象在JavaScript中是否具備特定屬性? javascript

考慮: java

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

那是最好的方法嗎? 安全


#1樓

隨着Underscore.js或( 甚至更好lodash測試

_.has(x, 'key');

該方法調用Object.prototype.hasOwnProperty ,但(a)的類型較短,而且(b)使用「對hasOwnProperty的安全引用」(即,即便hasOwnProperty被覆蓋也能夠使用)。 ui

特別是lodash將_.has定義爲: this

function has(object, key) {
      return object ? hasOwnProperty.call(object, key) : false;
   }
   // hasOwnProperty = Object.prototype.hasOwnProperty

#2樓

是的,它是:)我想您也能夠執行Object.prototype.hasOwnProperty.call(x, 'key') ,若是x具備一個名爲hasOwnProperty的屬性,它也應該能夠工做:) spa

但這會測試本身的屬性。 若是要檢查它是否具備也能夠繼承的屬性,能夠使用typeof x.foo != 'undefined'prototype


#3樓

if (x.key !== undefined)

Armin Ronacher彷佛已經擊敗了我 ,可是: code

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 = "" )。

相關文章
相關標籤/搜索