IE9:hasOwnProperty技巧不起作用?

时间:2012-11-20 19:35:56

标签: javascript internet-explorer prototype hasownproperty

有充分证据表明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的解决方法不再可用吗?

1 个答案:

答案 0 :(得分:4)

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

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

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

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

所以.hasOwnProperty()正在给出正确的结果。