所有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