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

检查JavaScript中是否存在关联数组,javascript,object,associative-array,Javascript,Object,Associative Array,我在这里提出了同样的问题: 然而,我正在寻找一种方法,它将在包括IE6+在内的所有主要浏览器中工作。我看到的我喜欢的方法是在操作符中使用,这是我以前从未见过的 我在google chrome中尝试了一些不同的东西,似乎很管用,但我想知道为什么不使用它而不是在操作符中使用 供参考: var data = {foo : "bar"}; console.log("foo" in data); // true console.log("bar" in data); // false 我的建议: var

我在这里提出了同样的问题:

然而,我正在寻找一种方法,它将在包括IE6+在内的所有主要浏览器中工作。我看到的我喜欢的方法是在操作符中使用
,这是我以前从未见过的

我在google chrome中尝试了一些不同的东西,似乎很管用,但我想知道为什么不使用它而不是在
操作符中使用

供参考:

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

我的(第二个)方法有什么缺点吗?

缺点是,如果属性值的计算结果是错误的,则查找将失败,因为它是在测试值,而不是属性是否存在。毕竟,
将值强制为其真实/虚假值

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

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

[编辑-对于下面关于
hasOwnProperty()
的评论,这很好,但OP并没有只询问自己的属性,而且
hasOwnProperty()
,顾名思义,并没有选择继承的属性,因此可能不适合OP的要求]

您似乎在寻找替代方案,因为您以前不知道
中的
操作符,并且假设并非所有主流浏览器都支持它。事实上,包括IE6在内的所有主流浏览器都支持它。发件人:

以下文档模式支持:怪癖、Internet Explorer 6标准、Internet Explorer 7标准、Internet Explorer 8标准、Internet Explorer 9标准、Internet Explorer 10标准


我不想解释你建议的方法的缺点,因为另一个答案和评论已经说明了这一点。

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


很明显,如果键值是falsy,那么就会得到一个假阴性
var data={foo:0}
var数据={foo:false}
变量数据={foo:'}。当然,如果你知道你的对象永远不会包含这样的值,你就没事了。但是,一般解决方案应该在没有任何假设的情况下工作。这是否更适合IE6在
中支持
,请参见第页。我应该指出,我的回答中唯一需要注意的是,它不会拾取值已显式设置为
未定义的属性。也就是说,我无法想象为什么要设置这样的属性……解决方案比
中的
更为冗长,加上未定义的值会失败。请参阅我的第一条评论:
undefined
。是的,
中的
更好,但OP需要一个替代方案。当然,
中的
应该足够了。如果你想要一个健壮的解决方案,那么你可以始终使用
。hasOwnProperty
他在哪里要求替代
中的
?问题的重点似乎是这一部分:“我在google chrome中尝试了一些不同的东西,似乎很管用,但我想知道为什么不使用它来代替
操作符中的
。”
var obj = {foo: 0}
console.log(obj.hasOwnProperty('foo')) //true
console.log(obj.hasOwnProperty('bar')) //false