对象/哈希是否有$ .inArray函数?

时间:2014-03-20 23:06:43

标签: javascript jquery

这样的事情:

object = { 'one' : 1, 'two' : 2 }
$.inObject(object, 'one') // returns true
$.inObject(object, 'three') // returns false

它只会搜索键。

3 个答案:

答案 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";
}