我有一堆console.log()电话在我的JavaScript。

我应该评出来之前,我部署到生产环境?

我想只是放在那里,所以我没有去重新添加评论后,如果我需要做任何更多的调试的麻烦。这是一个坏主意?

有帮助吗?

解决方案

这将导致Javascript错误,终止包含错误的Javascript的块的执行。

您可以,然而,定义了一个虚拟函数,这是一个无操作时萤火虫未激活:

if(typeof console === "undefined") {
    console = { log: function() { } };
}

如果您使用的不是log之外的任何方法,你需要存根出那些为好。

其他提示

正如其他人已经指出它,离开它会在某些浏览器导致错误,但这些错误可以通过左右投入一些存根来工作。

不过,我不仅把它们注释掉,但完全删除这些行。这似乎只是马虎不这样做。也许我是迂腐,但我不认为“生产”代码应包括“调试”代码可言,甚至在评论形式。如果你在所有发表评论,这些评论应说明代码的作用,或者它背后的原因 - 残疾人代码不是块。 (虽然,大多数的意见应该通过自动缩小的处理来移除你最小化,对吧?)

另外,在若干年内使用JavaScript的,我不记得曾经回来功能,并说:“哎呀,我希望我能留下那些console.logs在这里发生!”一般来说,当我在“做”与工作有关的功能,后来都回来了,我回来了解决其他一些问题。无论是新的问题是,如果从上一轮工作的console.logs本来是有帮助的,那么我已经发现了问题的第一次。换句话说,如果我回来的东西,我不太可能,因为我需要在以前场合需要完全相同的调试信息。

只是我的两分钱...祝你好运!

如果你有一个部署脚本,你可以用它来剥离出调用CONSOLE.LOG(然后再缩小文件)。

当你在它,你可以通过JSLint的把你的JS,并记录违规检查(或阻止部署)。

这就是为什么要自动部署一个很好的例子。如果你的程序允许你发布在它console.logs一个js文件,在某些时候,你的的做到这一点。

要我所知有比下面45个字符磕碰出console.log的不短方法:

window.console||(console={log:function(){}});

这是第一的,这取决于控制台方法要踩灭了所有的人都是微小的3个不同的版本和所有已在IE6 +和现代的浏览器进行了测试。

在另外两个版本涵盖改变其它控制台方法。其中包括四个基本和其他涵盖萤火虫和WebKit所有已知的控制台方法。再次,在最小的文件大小可能的。

这项目是在github: https://github.com/andyet/ConsoleDummy.js

如果你能想到的任何方式,以进一步减少代码,贡献的欢迎。

- 编辑 - 5月16日,2012

因为我已经在这个代码改善。它仍然是微小的,但增加了打开控制台输出和关闭的能力: https://github.com/HenrikJoreteg/andlog

功能上的更改日志显示

您应该至少创建一个虚拟console.log如果对象不存在,那么你的代码将在未安装萤火扔在用户计算机上的错误。

另一种可能性是,触发仅在“调试模式”,即,如果某一标志被设置日志记录:

if(_debug) console.log('foo');
_debug && console.log('foo');

希望它可以帮助别人 - 我写了一个包装为它而回,其略高于接受的解决方案更加灵活

显然,如果使用其他方法,如console.info等,可以复制的效果。当暂存环境中进行,只需将默认C.debug更改为false,生产,你不会有更改任何其他代码/带线出等很容易回来和调试以后。

var C = {
    // console wrapper
    debug: true, // global debug on|off
    quietDismiss: false, // may want to just drop, or alert instead
    log: function() {
        if (!C.debug) return false;

        if (typeof console == 'object' && typeof console.log != "undefined") {
            console.log.apply(this, arguments); 
        }
        else {
            if (!C.quietDismiss) {
                var result = "";
                for (var i = 0, l = arguments.length; i < l; i++)
                    result += arguments[i] + " ("+typeof arguments[i]+") ";

                alert(result);
            }
        }
    }
}; // end console wrapper.

// example data and object
var foo = "foo", bar = document.getElementById("divImage");
C.log(foo, bar);

// to surpress alerts on IE w/o a console:
C.quietDismiss = true;
C.log("this won't show if no console");

// to disable console completely everywhere:
C.debug = false;
C.log("this won't show ever");

这似乎为我工作...

if (!window.console) {
    window.console = {
        log: function () {},
        group: function () {},
        error: function () {},
        warn: function () {},
        groupEnd: function () {}
    };
}

想我会共享一个不同的角度。离开这个类型输出到外部世界可见的PCI应用让你不符合。

我同意控制台存根是一个好方法。我已经试过各种控制台插件,代码片段,其中包括一些相当复杂的。他们都在至少一个浏览器有一些问题,所以我结束了一些简单的像下面,这是我见过的其他片段,并从YUI团队的一些建议的合并会。它出现在IE8 +,Firefox,铬和Safari(用于Windows)。起作用

// To disable logging when posting a production release, just change this to false.
var debugMode = false;

// Support logging to console in all browsers even if the console is disabled. 
var log = function (msg) {
    debugMode && window.console && console.log ? console.log(msg) : null;
};

注意:它支持通过一个标志禁用日志记录到控制台。也许你可以通过构建脚本也自动执行此。或者,你可能暴露用户界面或一些其他机制在运行时翻转此标志。您可以根据日志门槛获得更复杂,当然,与日志记录级别,AJAX提交日志(例如所有的错误级别语句被发送到服务器上存放有等)。

许多这些线程/记录周围的问题似乎认为日志语句作为调试代码,而不是代码的 仪器。因此,希望删除日志报表。当应用程序是在野外,它不再像以前那样容易附着一个调试器或信息是从用户或通过支持供应给你检测是非常有用的。你不应该记录任何敏感的,无论在哪里它已经记录到这么隐私/安全性应该不会受到影响的。一旦你想记录的仪表就成了现在的生产代码,并应写入相同的标准。

通过使用越来越复杂的JavaScript我认为仪器是关键的应用。

作为其他的有提到将在大多数浏览器引发的错误。在Firefox 4也不会引发错误,该消息被记录在web开发者控制台(在Firefox 4新)。

一个解决办法,以这样的错误,我真的很喜欢很德&&错误

var de = true;
var bug = function() { console.log.apply(this, arguments); }

// within code
de&&bug(someObject);

一个很好的单行:

(!console) ? console.log=function(){} : console.log('Logging is supported.');
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top