如何檢查對象在JavaScript中是否具備特定屬性? javascript
考慮: java
x = {'key': 1}; if ( x.hasOwnProperty('key') ) { //Do this }
那是最好的方法嗎? 安全
隨着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
是的,它是:)我想您也能夠執行Object.prototype.hasOwnProperty.call(x, 'key')
,若是x
具備一個名爲hasOwnProperty
的屬性,它也應該能夠工做:) spa
但這會測試本身的屬性。 若是要檢查它是否具備也能夠繼承的屬性,能夠使用typeof x.foo != 'undefined'
。 prototype
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 Rudolph和Armin Ronacher 指出 ,一種更安全但較慢的解決方案是: 對象
Object.prototype.hasOwnProperty = function(property) { return typeof this[property] !== 'undefined'; };
好的,除非您不想繼承屬性,不然個人答案彷佛正確:
if (x.hasOwnProperty('key'))
如下是一些其餘選項來包含繼承的屬性:
if (x.key) // Quick and dirty, but it does the same thing as below. if (x.key !== undefined)
if (typeof x.key != "undefined") { }
由於
if (x.key)
若是x.key
解析爲false
則失敗(例如, x.key = ""
)。