所有Javascript對象都是關聯數組,所以這非常簡單。實際上,您有幾個選項,因爲對象可以具有其自己的屬性,它從原型對象繼承的屬性,具有未定義值的屬性以及具有「假」值的屬性(undefined
,null
,0
,""
或當然, false
)。 (這裏有一個對象沒有一個屬性,具有未定義值一之間的區別。)
檢查,看看如果對象屬性本身:您使用obj.hasOwnProperty
:
function someName(obj) {
if (!obj ||
!obj.hasOwnProperty('myOneKey') ||
!obj.hasOwnProperty('myOtherKey'))
return false;
}
// Do other stuff
}
檢查到看看對象具有通過其原型屬性本身或:您使用propName in obj
:
function someName(obj) {
if (!obj ||
!('myOneKey' in obj) ||
!('myOtherKey' in obj))
return false;
}
// Do other stuff
}
檢查,看是否對象有屬性(直接或通過原型),它不是未定義:你找一個未定義的值:
function someName(obj) {
if (!obj ||
typeof obj.myOneKey === "undefined" ||
typeof obj.myOtherKey === "undefined")
return false;
}
// Do other stuff
}
檢查,看是否該屬性是falsey(undefined
,null
,0
,""
,或課程,false
),不管原因是:只要使用!
:
function someName(obj) {
if (!obj ||
!obj.myOneKey ||
!obj.myOtherKey)
return false;
}
// Do other stuff
}
無論如何,用法:
var obj = {
myOneKey: 'fred',
myOtherKey: 'barney'
};
someName(obj);
我該如何用這樣的參數調用該函數? – 2010-05-31 11:43:53
我不能使用in運算符而不是hasOwnProperty? – 2010-05-31 11:44:59
@dfjhdfjhdf:顯然,當你問這個問題時,我正在增加對它的討論以及它們之間的區別。 :-) – 2010-05-31 11:50:40