如何计算全局范围内全局变量的数量?
我正在开发另一个项目。我加载Chrome开发者工具来检查全局变量的状态。当我在Scope下打开Global时,我看到了大量的全局变量。我需要8秒钟才能浏览它们。我已经在这个项目上工作了一段时间了,我知道全局变量是一个我们必须解决的问题;但是,*与我的问题无关。如何计算全局范围内全局变量的数量?
传达我们全球范围内的规模被淹没,我想计算在全球范围内
如何做到这一点目前实例变量的数目?
我正在寻找JavaScript中的答案,我可以在我的控制台中立即执行。基本上可以遍历全球范围和count++
。
var count = 0;
for(var x in window){
if(window.hasOwnProperty(x)) count++;
}
console.log(count);
'Object.keys(this).length'可能更简单。 ;-) – RobG
@RobG工作;加里的回答回来了0.请发表回答 – KareemElashmawy
加里,你的回报329点击; @ RobG's返回327. – KareemElashmawy
我不确定全局变量的数量本身就是一个有用的指标。您应该做一些分析来确定哪些是由代码创建的,这些代码是特定于主机的,并且与环境相关(如DOM)。
在浏览器中,窗口对象是global object的同义词,主机被允许在其原型属性添加到它(例如window.name)以及定义属性(如果有的话) 。另外,所有元素ID都是作为窗口的属性创建的(你可以责怪微软和IE),所以如果有很多元素ID,那么会有很多全局属性。
无论如何,下面是计算全局(窗口)对象自身可枚举属性的两种方法。它使用一个IIFE,所以它本身不会创建任何属性。
// Create 3 global properties
var x, y, z;
(function(global) {
// for..in with hasOwnProperty check
var count = 0;
for (var prop in global) {
if (global.hasOwnProperty(prop)) {
count++;
}
}
console.log('for..in count: ' + count +
// Direct count using Object.keys
'\nObject.keys : ' + Object.keys(global).length);
// Pass global (window in a browser) object to function
}(this));
因此,在浏览器的方法来测试代码创建的变量可能是:
- 伯爵全球性的“空”的文件数量,即应该是默认的主机定义集
- 计算可疑文档中全局属性的总数
- 使用ID计算文档中元素的数量
因此,代码创建的全局变量的数量应该是项目2 - (项目1 +项目3)的结果。
你可以指望与ID类似的元素:
var allEls = document.getElementsByTagName('*');
var idCount = 0;
for (var i=0, iLen=allEls.length; i<iLen; i++) {
if (allEls[i].id != '') {
++idCount;
}
}
或:
[].filter.call(document.getElementsByTagName('*'), function(el) {
return el.id != '';
}).length;
迭代通过'window'的属性?谨防原型成员,如果你不想数那些。 – Li357
很可能,这个代码库有很多其他问题。有一些静态代码分析工具可能对您更有用。我之前使用过Code Climate。它吸取了很多东西。只要注意这些工具...他们生成的报告只是一个指导,而不是一个明确的TODO清单。总会有一些东西可以接受,这很可能会错过一些东西。但是,如果你只是想要一个如何拧紧我的指标,那些工具是相当不错的。 – Brad
@AndrewLi这就是我想的;但是,我从来没有用JS来遍历全局或窗口属性。 (我试图完全使用对象或简单的程序脚本) – KareemElashmawy