3

有据可查的是,IE 中的原生 DOM 元素不包含 hasOwnProperty() 方法。有几个解决方案;其中最优雅的是直接在 Object.prototype 中访问 hasOwnProperty() 方法,如下所示:

Object.prototype.hasOwnProperty.call(element, name);

在我看来,这不再适用于 IE9。有人可以解释吗?这是一个说明这一点的小提琴。

在标准模式下使用 IE9 并关闭兼容模式,警报显示:

sessionStorage is supported: false
localStorage is supported: false

但是,在打开兼容性或怪癖模式(或使用开发人员工具使用 IE8 和 IE7 引擎呈现页面)后,警报会显示:

sessionStorage is supported: true
localStorage is supported: true

这里还有其他工作吗,或者 hasOwnProperty 的这种解决方法不再可用?

4

1 回答 1

4

这是因为这些属性存储在原型链中,window而不是直接存储在对象上。

如果您使用in,它会为您搜索原型链,并为您true提供IE9.

var isSessionStorageSupported = "sessionStorage" in window; // true
var isLocalStorageSupported = "localStorage" in window;     // true

http://jsfiddle.net/fHRZs/2/

.hasOwnProperty()给出正确的结果也是如此。

于 2012-11-20T19:45:48.810 回答