Javascript 是否有用于对象/散列的$.inArray函数?

Javascript 是否有用于对象/散列的$.inArray函数?,javascript,jquery,Javascript,Jquery,大概是这样的: object = { 'one' : 1, 'two' : 2 } $.inObject(object, 'one') // returns true $.inObject(object, 'three') // returns false obj = { 'one' : 1, 'two' : 2 }; console.log('one' in obj) // true console.log('three' in obj) // false 它只会搜索键。您可以使用ty

大概是这样的:

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

它只会搜索键。

您可以使用
typeof

function inObject(obj, key) {
    return typeof obj[key] != "undefined";
}

是的,关键字中的
。无需使用jQuery:

object = { 'one' : 1, 'two' : 2 };
alert('one' in object); // true
alert('three' in object); // false

您还可以使用更可靠的
object.hasOwnProperty('blah')
。Douglas Crockford更喜欢这种方法,你会发现偶尔会对此抱怨。我更喜欢
符号中的
,因为它更容易阅读。

最安全的方法是使用
.hasOwnProperty()

您也可以使用
中的
操作符,其他人建议如下:

object = { 'one' : 1, 'two' : 2 }
$.inObject(object, 'one') // returns true
$.inObject(object, 'three') // returns false
obj = { 'one' : 1, 'two' : 2 };
console.log('one' in obj)   // true
console.log('three' in obj) // false
但是,
中的
运算符可能会被某些库或其他代码添加到对象的对象原型上的任何属性所混淆,因此
hasOwnProperty()
通常被认为是检测您自己添加到实际对象中的内容的更安全的选项。换句话说,如果有人向对象原型添加了一个方法或属性,它将由
中的
操作符拾取,而不是由
.hasOwnProperty()
拾取,后者只检查实际对象本身,而不是任何继承的属性



仅供参考,对于您的特定用途而言,这可能有些过分,但是这里有一个
Set
对象和
ValueSet
对象的实现,该对象使用这种类型的逻辑并提供许多典型的
Set
操作:。代码也可以用于
集合
对象,因此如果您想进一步了解自己,您可以看到它是如何工作的。

只需使用JavaScript:
对象。hasOwnProperty('one')
以下是一篇回答问题的帖子-
$。inArray
查找值,而您似乎想要查找属性。不确定您实际想要哪个。与
中的
的冲突不仅仅是与可枚举方法的冲突。对象上的任何属性或继承的属性都将返回
true
,而与可枚举性无关。然而,这并不一定不安全。可能是在某些情况下应该包括继承的属性。@cookiemonster-在OP的示例中,他们显然只希望在这里包括他们在对象上定义的属性,这是非常典型的,这就是为什么通常最好使用
.hasOwnProperty()
。只是说这取决于需求。不过,属性是否可枚举对
运算符中的
的结果没有影响。这并不混乱。它正按预期工作。@cookiemonster-我已经删除了任何关于可枚举性的内容。
.hasOwnProperty()
“奇怪的结果”?您的意思是,
.hasOwnProperty()
只有在您自己将属性直接添加到对象中时才会返回true,而在您使用的某个库将属性添加到对象的原型中时不会返回true-这是您通常想要的,也是OP看起来想要的。这是一个完全正确的答案。不值得否决票,IMO。您不需要typeof,因为访问不存在的对象属性将导致未定义的错误。因此,您可以使用obj[键]!==未定义