如何用静态代码分析显示所有JavaScript个全局变量?
How to display all JavaScript global variables with static code analysis?
我知道我可以输入 Chrome 或 FF 以下命令:
Object.keys(window);
但这会显示 DHTMLX 内容以及我不感兴趣的函数名称。它不会显示尚未执行的函数中的变量。我们有 20,000 多行 JavaScript 代码库,所以我更喜欢静态代码分析。我找到了JavsScript Lint。这是一个很棒的工具,但我不知道如何使用它来显示全局变量。
所以我正在搜索内存泄漏、遗忘 var
关键字等...
捕获未声明变量的一个好方法是将 'use strict'
添加到您的代码中。
错误将出现在控制台中,或者您可以将它们显示在 try ... catch
块中:
'use strict';
try {
var i= 15;
u= 25;
} catch(ee) {
alert(ee.message);
}
要 [只] 做您所要求的,我想您正在寻找这个:
for each (obj in window) {
if (window.hasOwnProperty(obj)) {
console.log(obj);
}
}
我没有检查代码,这与我不同,但你明白了。尝试先设置一些内容 (var spam = "spam";
),您会在控制台上看到它的报告,并且 不是 您要求避免的问题。
也就是说,例如 ; JSLint executes JavaScript in your browser without "phoning home", so feel free to run it. There are also many offline tools for JSLinting your code. I use a plugin for Sublime Text。
如果您想要一些最简单的 html/JavaScript 代码到 "wrap" JSLint,我有一个示例 here. Just download the latest jslint.js file from Crockford's repository into the same directory, and poof, you're linting with a local copy of JSLint.js. Edit: Added code in a new answer here。
尽管了解 当您访问 JSLint.com. Honestly, I can say with some confidence, Crockford would rather not see our code. ;^) You download JSLint.js (actually webjslint 时,您正在本地使用该包装器 或 进行 linting,一些文件的缩小编译)来自JSLint.com,但是你在浏览器中执行。
(诚然,您在技术上是正确的——您永远不知道该站点何时会受到损害,并且要完全恢复正常,您 sh/c/ould 兽医 jslint.js 每次你抓取一个新的副本。在本地 运行 更安全,但在撰写本文时,你似乎可以安全地使用 JSLint.com。只需盯着你最喜欢的浏览器的网络选项卡,同时 运行宁一些测试,非专有代码,看看是否有任何电话发生。或者拔下你的盒子的网络电缆!)
to use "use strict";
是另一个很好的建议。
我找到了一个非常好的解决方案,可以使用 jsl
命令行工具列出所有全局变量:
我只需要将 /*jsl:option explicit*/
放入我要检查的每个文件中。那就够了 运行 ./jsl -process <someFile> | grep 'undeclared identifier'
也可以使用 referenceFile
,其中包含一些有意的全局变量 /*jsl:import <referenceFile>*/
,因此不会列出这些变量。
我知道我可以输入 Chrome 或 FF 以下命令:
Object.keys(window);
但这会显示 DHTMLX 内容以及我不感兴趣的函数名称。它不会显示尚未执行的函数中的变量。我们有 20,000 多行 JavaScript 代码库,所以我更喜欢静态代码分析。我找到了JavsScript Lint。这是一个很棒的工具,但我不知道如何使用它来显示全局变量。
所以我正在搜索内存泄漏、遗忘 var
关键字等...
捕获未声明变量的一个好方法是将 'use strict'
添加到您的代码中。
错误将出现在控制台中,或者您可以将它们显示在 try ... catch
块中:
'use strict';
try {
var i= 15;
u= 25;
} catch(ee) {
alert(ee.message);
}
要 [只] 做您所要求的,我想您正在寻找这个:
for each (obj in window) {
if (window.hasOwnProperty(obj)) {
console.log(obj);
}
}
我没有检查代码,这与我不同,但你明白了。尝试先设置一些内容 (var spam = "spam";
),您会在控制台上看到它的报告,并且 不是 您要求避免的问题。
也就是说,例如
如果您想要一些最简单的 html/JavaScript 代码到 "wrap" JSLint,我有一个示例 here. Just download the latest jslint.js file from Crockford's repository into the same directory, and poof, you're linting with a local copy of JSLint.js. Edit: Added code in a new answer here。
尽管了解 当您访问 JSLint.com. Honestly, I can say with some confidence, Crockford would rather not see our code. ;^) You download JSLint.js (actually webjslint 时,您正在本地使用该包装器 或 进行 linting,一些文件的缩小编译)来自JSLint.com,但是你在浏览器中执行。
(诚然,您在技术上是正确的——您永远不知道该站点何时会受到损害,并且要完全恢复正常,您 sh/c/ould 兽医 jslint.js 每次你抓取一个新的副本。在本地 运行 更安全,但在撰写本文时,你似乎可以安全地使用 JSLint.com。只需盯着你最喜欢的浏览器的网络选项卡,同时 运行宁一些测试,非专有代码,看看是否有任何电话发生。或者拔下你的盒子的网络电缆!)
"use strict";
是另一个很好的建议。
我找到了一个非常好的解决方案,可以使用 jsl
命令行工具列出所有全局变量:
我只需要将 /*jsl:option explicit*/
放入我要检查的每个文件中。那就够了 运行 ./jsl -process <someFile> | grep 'undeclared identifier'
也可以使用 referenceFile
,其中包含一些有意的全局变量 /*jsl:import <referenceFile>*/
,因此不会列出这些变量。