我如何打印消息到错误控制台,最好包括一个变量?

例如,像这样:

print('x=%d', x);

当前回答

下面是如何将消息打印到浏览器的错误控制台(而不是调试器控制台)的解决方案。(可能有很好的理由绕过调试器。)

正如我在关于建议抛出错误以在错误控制台中获取消息的注释中所指出的,一个问题是这将中断执行线程。如果不想中断线程,可以在使用setTimeout创建的单独线程中抛出错误。因此,我的解决方案(这是Ivo Danihelka的一个详细阐述):

var startTime = (new Date()).getTime();
function logError(msg)
{
  var milliseconds = (new Date()).getTime() - startTime;
  window.setTimeout(function () {
    throw( new Error(milliseconds + ': ' + msg, "") );
  });
}
logError('testing');

我以毫秒为单位包含了从开始时间到现在的时间,因为超时可能会打乱您期望看到消息的顺序。

Error方法的第二个参数是文件名,这里是一个空字符串,以防止输出无用的文件名和行号。可以获得调用方函数,但不能以简单的独立于浏览器的方式获得。

如果我们可以用警告或消息图标而不是错误图标来显示消息,那就太好了,但我找不到一种方法来做到这一点。

使用throw的另一个问题是,它可能会被一个封闭的try-catch捕获和丢弃,将throw放在一个单独的线程中也可以避免这个障碍。然而,还有另一种方法可以捕获错误,即如果窗口。Onerror处理程序被替换为执行不同操作的处理程序。我帮不了你。

其他回答

在《调试JavaScript:扔掉你的提醒!》中概述了一种跨浏览器的好方法。

安装Firebug,然后你就可以使用console.log(…)和console.debug(…)等等(更多信息请参阅文档)。

像往常一样,Internet Explorer是让您无法使用console.log()的笨重的旱冰鞋。

jQuery的日志可以很容易地进行调整,但是在任何地方都要添加它是一种痛苦。如果你正在使用jQuery,一个解决方案是把它放在你的jQuery文件的最后,首先缩小:

function log()
{
    if (arguments.length > 0)
    {
        // Join for graceful degregation
        var args = (arguments.length > 1) ? Array.prototype.join.call(arguments, " ") : arguments[0];

        // This is the standard; Firebug and newer WebKit browsers support this.
        try {
            console.log(args);
            return true;
        } catch(e) {
            // Newer Opera browsers support posting erros to their consoles.
            try {
                opera.postError(args);
                return true;
            } 
            catch(e) 
            {
            }
        }

        // Catch all; a good old alert box.
        alert(args);
        return false;
    }
}

异常被记录到JavaScript控制台。如果你想禁用Firebug,你可以使用它。

function log(msg) {
    setTimeout(function() {
        throw new Error(msg);
    }, 0);
}

用法:

log('Hello World');
log('another message');

关于上面提到的'throw()'的注意事项。它似乎完全停止了页面的执行(我在IE8中检查了),所以它对于记录“正在进行的进程”并不是很有用(比如跟踪某个变量……)

我的建议是在文档的某个地方添加一个textarea元素,并在需要时更改(或追加)它的值(这将更改其文本)以记录信息…