2015-04-26 60 views
1

在瀏覽器中的JavaScript全局變量存儲爲window主機對象的成員。如何在瀏覽器代碼中查找不屬於DOM,主機對象等的所有JavaScript全局變量?

而且在window是所有window這是瀏覽器的DOM的一部分,如果我認爲正確的屬性,其他的全局函數和對象它們還舉辦由瀏覽器提供的對象或implementaton /環境的另有一部分。

如何遍歷window的成員並儘可能多地過濾出所有不僅僅是由代碼創建的常規全局變量,如var foo = 1;

+0

不容易的,因爲它很容易讓一個覆蓋具有相同名稱自定義函數或變量作爲一個內置功能(不是很好,但它可以做到的,甚至錯誤) –

+0

沒關係。包括這個答案可能比沒有提到它的答案更有見地。 – hippietrail

+0

在我發佈這個問題之前,我無法在SO上找到事先說明。但是現在我發現了一對夫婦,但是每個都包含其他細節,例如只需要以下劃線作爲前綴的那些細節,或者只包含那些是數組的那些細節,所以至少在形式上這似乎更具規範性。使它成爲一個老問題的答案似乎是錯誤的,這些老問題的答案會在答案的代碼中分散注意力。 [(a)](https://stackoverflow.com/questions/8369338),[(b)](http://stackoverflow.com/questions/2226007) – hippietrail

回答

1

你爲什麼不嘗試:

keys(window); 

的Object.keys()方法返回一個給定的對象自己的枚舉的屬性的數組,在相同的順序由服務提供.. .in循環(區別在於for-in循環枚舉了原型鏈中的屬性)。

參考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

+0

它會過濾掉所有內置/主機對象的東西?嗯,也許它確實如此。在一個空白的Chrome瀏覽器選項卡中,我只有34個'window'成員:'[「top」,「window」,「location」,「external」,「chrome」,「document」,「DoodleNotifier」,「google」 「__」,「closure_lm_744166」,「jsl」,「closure_memoize_cache_」,「__jsaction」,「gbar」,「gbar_」,「__PVT」,「gapi」,「___jsl」,「closure_uid_161476544」,「closure_lm_36582」,「drasil 「,」osapi「,」gadgets「,」iframer「,」shindig「,」pos「,」googleapis「,」ToolbarApi「,」iframes「,」IframeBase「,」Iframe「,」IframeProxy「,」IframeWindow「, 「__gapi_jstiming __」]' – hippietrail

+0

對於一些這可能會出現一個新手問題,但你也可以做很多js編程,而不需要像這樣內省,所以簡要介紹一下什麼樣的過濾完成/未完成,關鍵術語所以我們知道要找到更多關於這方面的信息,將會很有幫助。 – hippietrail

+1

有些是通過瀏覽器添加的,有些是通過頁面上的插件添加的 – Tushar

相關問題