我在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);
}
我还有一个不可变的“容器”列表,它们用闭包隐藏但我可以使用名为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;
}
}
正如我的问题所述,我应该将这些控制台语句保留在生产代码中吗?
但它们对于以后维护代码非常有用。
让我知道你的想法。
答案 0 :(得分:2)
由于这些不是持久性日志,因此不会从中获益。它也运行在每台个人机器上,因为每个人都有自己的程序副本。如果你真的需要它,最好有一个可以切换这个功能的变量。特别是如果你的目标是调试大量预先确定的东西。
客户端问题需要调试,与服务器端略有不同。每个人都有自己的程序副本。 Browser-JS在客户端运行,你打开浏览器,你编写的所有代码都是在一个完整的代表中调用,与服务器端相比,调试很容易,因为很可能你无法访问该系统。它非常灵活,您可以直接在自己的浏览器中检查生产中的内容时覆盖它,而不会影响任何人。只需使用这些控制台语句覆盖它并调试问题。
在服务器端编程中登录是一个好主意。它提供了许多有用的信息并且是持久的。
答案 1 :(得分:1)
如上所述,调试代码不应出现在生产环境中。
但是,如果您打算保留它,请记住所有浏览器都不支持它。
因此,您可以检查其可用性并提供后备:
if (typeof window.console === 'undefined')
{
window.console = {};
}
if (typeof window.console.log === 'undefined')
{
window.console.log = function() { };
}
答案 2 :(得分:1)
根据mozilla开发者网络
此功能不符合标准,不符合标准。不要在面向Web的生产站点上使用它:它不适用于每个用户。实现之间可能存在很大的不兼容性,并且行为可能在将来发生变化。
在生产网站上留下console.log()
可能会导致问题,因为旧浏览器不支持此问题。在这种情况下,最有可能抛出异常。
答案 3 :(得分:0)
历史上,它被Javascript程序员认为是一种糟糕的做法。在一开始,一些浏览器并没有支持它(例如IE8或更低)。另外需要注意的是,您要使代码更大,以便下载。