我应该在 JavaScript 应用程序中保留控制台语句吗?
Should I keep console statements in JavaScript application?
我在 780 行代码 JS 脚本中的 3 处使用了 console.log() 和 console.dir() 语句。但所有这些都有助于调试和发现使用应用程序时可能出现的问题。
我有一个打印内部应用程序状态的函数,即变量的当前值:
printData: function () {
var props = {
operation: this.operation,
operand: this.operand,
operandStr: this.operandStr,
memory: this.memory,
result: this.result,
digitsField: this.digitsField,
dgField: this.dgField,
operationField: this.operationField,
opField: this.opField
};
console.dir(props);
}
我还有一个不可变的"contants"列表,这些"contants"被关闭隐藏,但我可以使用名为list()的访问器方法打印它们;在控制台中。像这样:
list: function () {
var index = 0,
newStr = "",
constant = '';
for (constant in constants) {
if (constants.hasOwnProperty(constant)) {
index = constant.indexOf('_');
newStr = constant.substr(index + 1);
console.log(newStr + ": " + constants[constant]);
}
}
}
我在调试中使用控制台的第三个地方是我的init();函数,如果发生异常错误,我会打印错误。
init: function (config) {
try {
this.memoryLabelField = global.getElementById(MEMORY_LABEL);
this.digitsField = global.getElementById(DIGITS_FIELD);
this.digitsField.value = '0';
this.operationField = global.getElementById(OPERATION_FIELD);
this.operationField.value = '';
return this;
} catch (error) {
console.log(error.message);
return error.message;
}
}
正如我的问题所述,我应该将这些控制台语句保留在生产代码中吗?
但它们对于以后的代码维护非常有用。
让我知道你的想法。
由于这些不是持久性日志,因此您不会从中获得太多好处。此外,它在每个单独的机器上运行,因为每个人都有自己的程序副本。如果你真的需要它,最好有一个可以切换此功能的变量。特别是如果你的目标是调试一大堆预先确定的东西。
客户端问题的调试需要与服务器端略有不同。每个人都有自己的程序副本。Browser-JS在客户端运行,您打开浏览器,您编写的所有代码都与您一起完成,与服务器端相比,调试很容易,服务器端很可能无法访问该系统。它非常灵活,您可以在直接从自己的浏览器检查生产中的某些内容时覆盖它,而不会影响任何人。只需使用这些控制台语句覆盖它并调试问题即可。
在服务器端编程中使用日志是个好主意。它提供了许多有用的信息并且是持久的。
如上所述,调试代码不应存在于生产环境中。
但是,如果您打算保留它,请记住,所有浏览器都不支持它。
因此,您可以检查其可用性并提供回退:
if (typeof window.console === 'undefined')
{
window.console = {};
}
if (typeof window.console.log === 'undefined')
{
window.console.log = function() { };
}
根据 Mozilla 开发者网络
此功能是非标准的,不在标准轨道上。不要在面向 Web 的生产站点上使用它:它不适用于每个用户。实现之间也可能存在很大的不兼容性,并且将来行为可能会发生变化。
将console.log()
留在生产站点可能会导致问题,因为旧版浏览器不支持它。在这种情况下,它最有可能引发异常。
历史上被Javascript程序员认为是一种不好的做法。在亿万年之初,一些浏览器不支持它(例如IE8或更低)。要记住的另一件事是,您正在使代码更大,以便下载。
- 可以't让我的if语句处理js中的html表单输入
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 控制台返回var不是't定义,但它是
- 自动修复”;语句前缺少分号“;
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- 如何在 API 调用后和 if 语句中启用提交按钮
- 是“;x==a||b”;以及“;x==a||x==b”;JavaScript中的等效语句
- 带有多个elseif的Javascript if语句
- 这个条件语句的逻辑有问题
- 如何使用Protractor从Chrome控制台获取所有日志
- Sharepoint JScript if语句未执行
- 为什么继续;语句冻结浏览器
- Javascript:If-then语句在函数中不起作用
- SharePoint 2010 Jquery/JSON Rest Multiple OR语句-如何
- 如何做if/else语句并使用控制台.log打印出来
- 我应该在 JavaScript 应用程序中保留控制台语句吗?
- 为什么此 IF 语句不返回控制台消息
- 为什么此控制台日志受后续 if 语句的影响
- 不同浏览器的控制台语句的执行顺序
- Javascript控制台日志在if语句计算结果为false后自行清除