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

Posted

技术标签:

【中文标题】对象没有 hasOwnProperty 方法(即未定义) - IE8【英文标题】:object has no hasOwnProperty method (i.e. it's undefined) - IE8 【发布时间】:2011-12-30 18:11:18 【问题描述】:

这看起来很奇怪。

这是我在 IE8 控制台中的实验:

typeof obj1 // "object"
obj1.hasOwnProperty // ...

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

关于什么可能导致这种情况的任何想法?

【问题讨论】:

obj2 是宿主对象吗?你在 IE7/ IE8 / quirks 模式下吗? 关于difference between native objects and host objects?:***.com/questions/7614317/… 相关***.com/questions/135448/… 一种不需要使用 hasOwnProperty() 的解决方法:hasOwnProperty() is undefined on the window object in IE8 and causes a TypeError 我遇到了这个问题,因为我想知道对象中是否存在属性,我可以通过这个链接解决:***.com/questions/11040472/… 【参考方案1】:

此示例来自 IE8,但来自 IE6+ 和大多数其他 IE 浏览器的返回相同。

#9 之前的 IE 没有为 host 对象定义它

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

/*  returned value: (undefined)
undefined
*/

【讨论】:

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

以上是关于对象没有 hasOwnProperty 方法(即未定义) - IE8的主要内容,如果未能解决你的问题,请参考以下文章

hasOwnProperty

jsObject.prototype.hasOwnProperty()

JavaScript对象篇之hasOwnProperty

Object的几个方法(defineProperty,hasOwnProperty...)

[Effective JavaScript 笔记]第45条:使用hasOwnProperty方法以避免原型污染

js属性对象的hasOwnProperty方法