2013-03-04 28 views
2
typeof(opener) 

在所有瀏覽器中產生「對象」,但IE,儘管該對象爲空。 IE僅在實際使用window.open或類似方法時纔會執行此操作。我討厭這樣想,但是IE是唯一的瀏覽器嗎?爲什麼有些瀏覽器在沒有一個瀏覽器時聲明瞭一個opener對象?

+0

你爲什麼看着這種類型?爲什麼不看價值?如果(開叫者)'。類型的關注點是什麼? – jfriend00 2013-03-04 21:33:58

+0

我只是想知道爲什麼該對象已被宣佈在第一名。 – Serhiy 2013-03-04 21:35:22

+0

IE在「普通」窗口(不是從js打開的窗口)上爲window.hasOwnProperty('opener')提供了什麼? 'undefined'? – bfavaretto 2013-03-04 21:35:24

回答

2

「爲什麼有些瀏覽器在沒有一個的時候聲明一個opener對象?

在JavaScript中,typeof null === "object"

相反的typeof,使用直接===比較。

opener === null; // true 

如果IE是給你undefined,然後使用==來測試這兩種。

opener == null; // true if null or undefined 
+3

雖然這是真的,但我不確定這是否與OP要求的內容有關。問題不是「爲什麼'typeof null''返回''object'',這是」爲什麼非IE瀏覽器在這種情況下返回'null'?「當IE沒有時(OP沒有說什麼IE做的,但我認爲它給'未定義的?) – nnnnnn 2013-03-04 21:35:14

+0

@nnnnnn:我認爲它是直接相關的。 OP假設一個對象被不必要地(或錯誤地)創建。 – 2013-03-04 21:35:24

+1

OP想知道爲什麼當窗口沒有開啓器時對象沒有被定義。 – Serhiy 2013-03-04 21:38:36

0
  • window.opener爲空。
  • null是導致與typeof對象的原始類型之一。

控制檯輸出鉻:

> window.opener 
    null 
> typeof null 
    "object" 
> typeof window.opener 
    "object" 

控制檯輸出IE9:

>> window.opener 
>> typeof window.opener 
"undefined" 

所以看起來像鉻/火狐初始化爲null,IE不定義它開始了。但是,當你進行真實性檢查時,這並不重要,因爲null和undefined會評估爲false。

+0

'typeof null'是'「object」',但'null'實際上並不是一個對象。 – 2013-03-04 21:35:04

-1

Internet Explorer與其他瀏覽器有很多不同之處。這只是一個小例子。

良好的跨平臺JavaScript需要有許多If-then-else分支的實例(或作爲替代try-catch)來處理這些差異。

+0

一個簡單的測試方法是查看Navigator.appName – 2013-03-04 21:48:08

相關問題