有充分证据表明IE中的原生DOM元素不包含hasOwnProperty()方法。这有几个解决方案;其中最优雅的是直接在Object.prototype中访问hasOwnProperty()方法,如下所示:
Object.prototype.hasOwnProperty.call(element, name);
在我看来,这在IE9中不再适用。谁能解释一下?这是一个fiddle来说明这一点。
在兼容模式关闭的标准模式下使用IE9时,警报显示:
sessionStorage is supported: false
localStorage is supported: false
但是,在打开兼容性或怪异模式后(或使用开发者工具使用IE8和IE7引擎渲染页面)后,警报会显示:
sessionStorage is supported: true
localStorage is supported: true
这里有其他工作吗,或者hasOwnProperty的解决方法不再可用吗?
答案 0 :(得分:4)
这是因为这些属性存储在window
的原型链中,而不是直接存储在对象上。
如果您使用in
,它会为您搜索原型链,并在true
中为您提供IE9
。
var isSessionStorageSupported = "sessionStorage" in window; // true
var isLocalStorageSupported = "localStorage" in window; // true
所以.hasOwnProperty()
正在给出正确的结果。