我应该在 JavaScript 应用程序中保留控制台语句吗?

Should I keep console statements in JavaScript application?

本文关键字:控制台 语句 保留 JavaScript 应用程序 我应该      更新时间:2023-09-26

我在 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或更低)。要记住的另一件事是,您正在使代码更大,以便下载。