Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何计算全局范围内全局变量的数量?_Javascript - Fatal编程技术网

Javascript 如何计算全局范围内全局变量的数量?

Javascript 如何计算全局范围内全局变量的数量?,javascript,Javascript,我在做一个别人开发的项目。我加载ChromeDeveloper工具来检查全局变量的状态。当我在Scope下勾选open Global时,我看到了大量的全局变量。我花了超过8秒的时间浏览它们。在这个项目上工作了一段时间之后,我知道全局变量是一个我们必须解决的问题;但是,*这与我的问题无关 为了传达我们被淹没的全局范围的规模,我想计算当前在全局范围中实例化的变量的数量 我该怎么做 我正在用JavaScript寻找一个可以在控制台中立即执行的答案。基本上,它可以在全局范围内迭代,并且count++ 我

我在做一个别人开发的项目。我加载ChromeDeveloper工具来检查全局变量的状态。当我在Scope下勾选open Global时,我看到了大量的全局变量。我花了超过8秒的时间浏览它们。在这个项目上工作了一段时间之后,我知道全局变量是一个我们必须解决的问题;但是,*这与我的问题无关

为了传达我们被淹没的全局范围的规模,我想计算当前在全局范围中实例化的变量的数量

我该怎么做


我正在用JavaScript寻找一个可以在控制台中立即执行的答案。基本上,它可以在全局范围内迭代,并且
count++

我不确定全局变量的计数本身是否是一个有用的指标。您应该进行一些分析,找出哪些是由代码创建的,哪些是特定于主机的,哪些是与环境相关的(例如DOM)

var count = 0;
for( var x in window ){
    if( window.hasOwnProperty(x) ) count++;
}
console.log(count);
在浏览器中,窗口对象是的同义词,允许主机向其添加属性(例如window.name)以及在其原型上定义属性(如果有)

而且,所有元素ID都是作为窗口的属性创建的(你可以责怪微软和IE),所以如果有很多元素ID,那么就会有很多全局属性

无论如何,下面是计算全局(窗口)对象自身可枚举属性的两种方法。它使用iLife,因此它本身不创建任何属性

//创建3个全局属性
变量x,y,z;
(职能(全球){
//对于..使用hasOwnProperty检查
var计数=0;
for(全局中的var prop){
if(全局hasOwnProperty(prop)){
计数++;
}
}
console.log('for..in count:'+count+
//使用Object.keys直接计数
'\nObject.keys:'+Object.keys(全局).length);
//将全局(浏览器中的窗口)对象传递给函数

}(本);遍历
窗口的属性?如果您不想计算原型成员,请注意原型成员。很可能,此代码库还有许多其他问题。有一些静态代码分析工具可能对您更有用。我以前使用过代码气候。它能学到很多东西。小心这些工具。。。他们生成的报告只是一个指南,而不是一个确定的待办事项列表。总会有一些事情是好的,它也可能会错过一些事情。但如果你只是想要一个“我到底有多糟糕”的指标,那么这些工具就相当不错了;但是,我从未使用JS迭代全局或窗口属性。(我尝试只处理对象或简单的过程脚本)@leu\m我已经更新了它以澄清。谢谢你指出这一点。你最好找一个非代码的答案,例如使用开发工具或一些静态代码分析等。请参阅试图在普通JS
Object.key(this.length
中尝试你想要的东西的黑客。可能更简单。;-)@工作的罗布;加里的回答是0。请将此作为回复,Gary,您的回复命中329次@RobG返回327。警告:是Object.keys(窗口)。长度不是Object.keys(此)。length@Gary-返回自己的可枚举属性,与..中的hasOwnProperties检查有效相同。这将返回全局对象,它与窗口对象同义,但适用于比浏览器更多的环境。