对象没有hasOwnProperty方法(即未定义)- IE8

28

这似乎非常奇怪。

以下是我在IE8控制台中进行的实验:

typeof obj1 // "object"
obj1.hasOwnProperty // {...}

typeof obj2 // "object"
obj2.hasOwnProperty // undefined

有什么想法可以解决这个问题吗?


obj2是宿主对象吗?你在IE7/IE8/怪异模式下吗? - Raynos
1
关于本地对象和宿主对象之间的区别?:https://dev59.com/-2sz5IYBdhLWcg3w3bpb - Adriano
请问如何在JavaScript中检查一个对象是否有某个属性? - Adriano
一种不需要使用hasOwnProperty()的解决方法:在IE8中,window对象上未定义hasOwnProperty()会导致TypeError错误 - Chris Bier
我曾经遇到过这个问题,我想知道对象中是否存在某个属性,所以我可以通过这个链接解决: https://dev59.com/VGgu5IYBdhLWcg3w2KbM - Harry Sarshogh
1个回答

37

这个示例来自IE8,但是同样的返回值也适用于IE6+和其他大多数IE浏览器。

在#9版本之前的IE浏览器没有为host对象定义它。

var o=window;// or document or document elements
o.hasOwnProperty

/*  returned value: (undefined)
undefined
*/

40
也许是 Object.prototype.hasOwnProperty.call(window,name) - panzi
2
@panzi:非常感谢!这在IE8中有效,现在不兼容的浏览器已经被我的网站正确检测到了。(之前,在空白页面上会崩溃,因为没有window.hasOwnProperty) - Andrea
2
@panzi:如果您将评论中的信息发布为答案,可能会更好。这确实是问题的解决方案 - Oleg
1
@Oleg 只是猜测(因此有“可能”)。它真的有效吗?那我会写一个答案。 - panzi
据我所知,在IE8中创建的所有DOM元素/节点都存在与“hasOwnProperty”相关的问题,但是可以成功地使用“Object.prototype.hasOwnProperty.call(domElement,name)”来解决。 - Oleg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接