typeof(opener)
オブジェクトは null ですが、IE を除くすべてのブラウザで「オブジェクト」を生成します。IE は、window.open または同様のメソッドを実際に使用した場合にのみ実行します。考えたくないのですが、これを正しく行っているブラウザは IE だけですか?
typeof(opener)
オブジェクトは null ですが、IE を除くすべてのブラウザで「オブジェクト」を生成します。IE は、window.open または同様のメソッドを実際に使用した場合にのみ実行します。考えたくないのですが、これを正しく行っているブラウザは IE だけですか?
「オープナー オブジェクトがないのに、一部のブラウザーがオープナー オブジェクトを宣言するのはなぜですか?」
JavaScript では、typeof null === "object"
の代わりにtypeof
、直接===
比較を使用します。
opener === null; // true
IE が を提供している場合は、両方をテストするためにundefined
使用します。==
opener == null; // true if null or undefined
window.opener
無効です。null
のオブジェクトになるプリミティブ型の 1 つですtypeof
。コンソール出力 Chrome:
> window.opener
null
> typeof null
"object"
> typeof window.opener
"object"
コンソール出力 IE9:
>> window.opener
>> typeof window.opener
"undefined"
そのため、Chrome/Firefox は null に初期化し、IE は最初から定義していないようです。ただし、null および undefined は false と評価されるため、truey チェックを行う場合は問題ありません。
Internet Explorer は、他のブラウザーとは異なる多くのことを行います。これはほんの一例です。
優れたクロスプラットフォームの JavaScript では、これらの違いに対処するために、If-then-else 分岐 (または代替の try-catch として) のインスタンスを多数持つ必要があります。