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 に答える