我继承了一个项目,看起来有很多变量会污染全局范围,我想要找到所有这些变量。找到用户引入的全局变量的最佳方法是什么?我想排除默认情况下窗口对象上的属性,只需筛选出已由我们的代码引入的属性。是否有工具或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. 在Spring MVC中创建全局变量的最佳方式
- 4. 使用Python全局变量动态类的最佳方法()
- 5. 存储全局变量的最佳方法
- 6. 比较对象变量并查找变化的最佳方法
- 7. 在apache starup上定义Django全局变量的最佳方式
- 8. 在asp.net中管理全局变量的最佳方法是什么?
- 9. 在java中实现全局变量的最佳方法是什么?
- 10. 在iPhone应用程序中保留全局变量的最佳方法
- 11. 在iphone sdk中声明全局变量的最佳方法是什么?
- 12. javascript中的全局变量
- 13. JavaScript中的全局变量?
- 14. Magento的全局设置可变量 - 最佳方法,在不同的文件
- 15. 从firebase声明全局变量的最佳方式是什么?
- 16. javascript全局变量
- 17. 全局变量,Javascript
- 18. WordPress的 - 最安全的方法来定义全局变量
- 19. 使用全局变量或将方法参数传递给方法变量的最佳实践?
- 20. 查看模型(ViewData),UserControls/Partials和全局变量 - 最佳实践?
- 21. 从客户端获取节俭服务的全局变量的最佳方法
- 22. 全局变量是在类方法NULL
- 23. 在变量上使用全局开关的JavaScript替换()方法
- 24. JavaScript声明的全局变量不能分配在方法
- 25. 在C++中使用全局变量的最佳方式是什么?
- 26. 什么是在CakePHP中声明全局变量的最佳方式
- 27. 的Javascript全局变量
- 28. 全局变量的Javascript
- 29. 面向对象的javascript中成员变量的最佳方法?
- 30. 在MEAN Stack中跟踪单个全局变量的最佳做法是什么?
我认为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) –