这样的事情:
object = { 'one' : 1, 'two' : 2 }
$.inObject(object, 'one') // returns true
$.inObject(object, 'three') // returns false
它只会搜索键。
答案 0 :(得分:8)
最安全的方法是使用.hasOwnProperty()
:
obj = { 'one' : 1, 'two' : 2 };
obj.hasOwnProperty('one') // returns true
obj.hasOwnProperty('three') // returns false
您也可以像其他人建议的那样使用in
运算符:
obj = { 'one' : 1, 'two' : 2 };
console.log('one' in obj) // true
console.log('three' in obj) // false
但是,in
运算符可能会被某个库或其他代码可能已添加到Object的对象原型上的任何属性所混淆,因此hasOwnProperty()
通常被认为是更安全的选项。检测您自己添加到实际对象的内容。换句话说,如果有人向Object原型添加了一个方法或属性,它将由in
运算符拾取,而不是由.hasOwnProperty()
拾取,Set
仅检查实际对象本身,而不是任何继承属性。
仅供参考,对于您的特定用途而言,这可能是过度的,但是有一个ValueSet
对象和一个Set
对象的实现,它使用这种类型的逻辑并提供了许多典型的{ {1}}此处的操作:Mimicking sets in JavaScript?。该代码也可用于Set
对象,因此如果您想进一步教育自己,可以看到它是如何工作的。
答案 1 :(得分:5)
是的,in
关键字。不需要使用jQuery:
object = { 'one' : 1, 'two' : 2 };
alert('one' in object); // true
alert('three' in object); // false
您还可以使用更可靠的object.hasOwnProperty('blah')
。道格拉斯·克罗克福德喜欢这种方法,你会发现JSLint偶尔抱怨这个。我更喜欢in
符号,因为它更容易阅读。
答案 2 :(得分:0)
您可以使用typeof
:
function inObject(obj, key) {
return typeof obj[key] != "undefined";
}