我繼承了一個項目,看起來有很多變量會污染全局範圍,我想要找到所有這些變量。找到用戶引入的全局變量的最佳方法是什麼?我想排除默認情況下窗口對象上的屬性,只需篩選出已由我們的代碼引入的屬性。是否有工具或IDE插件可以讓我輕鬆識別這些內容?由於在Javascript中查找全局變量的最佳方法
0
A
回答
3
在窗口對象比較鑰匙用「空」窗口對象的鍵:
(function(){
var iframe = document.createElement('iframe');
iframe.src = "about:blank";
document.body.appendChild(iframe);
var windowVars = Object.keys(iframe.contentWindow);
var globalVars = Object.keys(window).filter(key => !windowVars.includes(key));
console.log("global Vars:", globalVars);
document.body.removeChild(iframe);
})();
現在你必須搜索你的代碼來找到他們聲明的行。
-1
嘗試......
for(var stuff in window) {
if(window.hasOwnProperty(stuff)) console.log(stuff);
}
這將列出在頁面上所有的函數和變量,可能不是超級有用的,但可能會給你一些更多的信息。
如果你打開Chrome開發工具,你可以嘗試一下。創建一個變量var life = 42
,執行上面的for循環後,你會看到它被列出。
1
獲取一個窗口對象實例:https://jsfiddle.net/noevgh4u/
對象實例的比較:https://jsfiddle.net/noevgh4u/1/
我能想到的辦法是,開放在你所選擇的瀏覽器中的空白頁,最實用的方法,寫出來的基於該窗口屬性的對象。
document.body.append("var obj = {");
for(prop of Object.keys(window)) {
document.body.append(prop +": null");
};
document.body.append("}");
在該示例中,從頁面上的文本複製該對象。
將它粘貼到您正在檢查全局變量的應用程序中。
創建使用
var newObj;
for(prop of Object.keys(window)) {
newObj[prop] = null;
};
,使應用程序中的新的對象,你現在有的OBJ包含一個空白Windows鍵和newObj包含應用程序鍵。
然後使用一種方法,例如Deep comparison of objects/arrays
什麼比較兩個相似:
function filterKeys(a, b) {
var firstKeys = Object.keys(a);
var secondKeys = Object.keys(b);
var missingKeys = firstKeys.filter(val => !secondKeys.includes(val));
return missingKeys;
}
var createdVarsAndFuncs = filterKeys(obj, newobj);
我的jsfiddle創造了這樣一個例子https://jsfiddle.net/noevgh4u/1/
相關問題
- 1. 在PowerShell中使用全局變量的最佳方法?
- 2. 在Celery中使用全局變量:最佳方法是什麼?
- 3. 檢查Javascript中是否存在變量的最佳方法?
- 4. PHP在網站中聲明「全局」變量的最佳方式
- 5. 在Spring MVC中創建全局變量的最佳方式
- 6. 存儲全局變量的最佳方法
- 7. 使用Python全局變量動態類的最佳方法()
- 8. 比較對象變量並查找變化的最佳方法
- 9. 在apache starup上定義Django全局變量的最佳方式
- 10. 在iphone sdk中聲明全局變量的最佳方法是什麼?
- 11. 在asp.net中管理全局變量的最佳方法是什麼?
- 12. 在java中實現全局變量的最佳方法是什麼?
- 13. 在iPhone應用程序中保留全局變量的最佳方法
- 14. JNI:以最小的開銷傳遞全局變量的最佳方法?
- 15. JavaScript中的全局變量?
- 16. Javascript中的全局變量
- 17. javascript中的全局變量?
- 18. javascript中的全局變量
- 19. 全局變量Web方法
- 20. Magento的全局設置可變量 - 最佳方法,在不同的文件
- 21. 在javascript中製作全局私有變量的方法?
- 22. 什麼是創建全局變量的最佳方式?
- 23. 從firebase聲明全局變量的最佳方式是什麼?
- 24. 從laravel數據庫中定義全局變量的最佳方法
- 25. 訪問方法中的全局變量
- 26. WordPress的 - 最安全的方法來定義全局變量
- 27. JavaScript全局變量
- 28. javascript - 全局變量
- 29. javascript全局變量
- 30. 全局變量,Javascript
我認爲jslint會警告未聲明爲本地的變量。它可能會產生標準窗口屬性的誤報,但不應該很難忽略它們。 – Barmar
這是SO [post1]上的幾個帖子(http://stackoverflow.com/questions/17276206/list-all-js-global-variables-used-by-site-not-all-defined)[post2]( http://stackoverflow.com/questions/8369338/javascript-dumping-all-global-variables) –