检查JavaScript中是否存在关联数组

时间:2012-08-05 19:33:55

标签: javascript object associative-array

我有同样的问题:Checking if a key exists in a JavaScript object?

但是,我正在寻找一种适用于所有主流浏览器的方法,包括IE 6+。我看到的我喜欢的方法是使用in运算符,这是我以前从未见过的。

我在谷歌浏览器中尝试了一些不同的东西似乎有用,但我想知道为什么不使用它而不是in运算符。

供参考:

var data = {foo : "bar"};
console.log("foo" in data); // true
console.log("bar" in data); // false

我的建议:

var data = {foo : "bar"};
console.log(!!data.foo); // true
console.log(!!data.bar); // false

我的(第二种)方法有任何缺点吗?

3 个答案:

答案 0 :(得分:2)

您似乎正在寻找替代方案,因为之前您不了解in运算符,并假设所有主流浏览器都不支持它。实际上,所有主流浏览器都支持 ,包括IE6。来自MSDN

  

支持以下文档模式:Quirks,Internet Explorer 6标准,Internet Explorer 7标准,Internet Explorer 8标准,Internet Explorer 9标准,Internet Explorer 10标准。

我不会解释你提出的方法的缺点,因为另一个答案和评论已经这样做了。

答案 1 :(得分:2)

我想指出“in”运算符可能非常可疑。如果左侧是直接成员或右侧,或右侧原型的一部分,它将返回true。我建议使用:.hasOwnProperty()

var obj = {foo: 0}
console.log(obj.hasOwnProperty('foo')) //true
console.log(obj.hasOwnProperty('bar')) //false

答案 2 :(得分:1)

缺点是,如果您的属性值评估为假,则查找将失败,因为它正在测试值,而不是属性存在。毕竟,!!强制将值赋予其真值/假值。

var obj = {foo: 0};
alert(!!obj.foo); //false

解决方案:

alert(typeof obj.foo != 'undefined')

[编辑 - 在回复下面关于hasOwnProperty()的评论时,这很好,但是OP并没有仅询问自己的属性,而hasOwnProperty(),正如其名称所暗示的那样,不会继承属性,因此可能不适合OP的要求]