我有同样的问题: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
我的(第二种)方法有任何缺点吗?
答案 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的要求]