【问题标题】:What's the difference between FireBug's console.log() and console.debug()?FireBug 的 console.log() 和 console.debug() 有什么区别?
【发布时间】:2010-06-16 12:36:44
【问题描述】:

一个非常简单的代码来说明差异。

var x = [0, 3, 1, 2];
console.debug('debug', x);
console.log('log', x);
// above display the same result
x.splice(1, 2);
// below display kind of a different result
console.debug('debug', x);
console.log('log', x);

alt text http://sixbytesunder.com/stuff/firebug_console.png

javascript 值完全相同,但 console.log() 显示的值与应用 splice() 方法之前略有不同。正因为如此,我失去了好几个小时,因为我认为 splice 让我的数组多维或其他东西很有趣。

我只是想知道为什么会这样。有人知道吗? :)

【问题讨论】:

  • 正如 Tim 在下面写道:“更有可能的是 console.logconsole.debug 只是在设计上表现不同。如果您好奇,可以使用来源。”您也可以通过Firebug's discussion groupfile a bug report 提问。

标签: javascript firefox console firebug


【解决方案1】:

如果您查看文档,it says:

控制台知道四种不同的类型 消息,如下所述 […]

另请参阅控制台 API 了解更多信息 关于不同的信息 命令。

showsconsole.log 上查看该页面:

如果对象被记录,它们将被 不是写成静态文本,而是写成 交互式超链接可以 单击以检查对象 Firebug 的 HTML、CSS、脚本或 DOM 选项卡。

所以,我认为在splice之前,数组内部还是一个Array(我知道,它一种对象),但是在操作之后,你得到一个一般对象,至少在内部。我知道这是一个很弱的解释,但 Firebug 在控制台中有更奇怪的行为。

顺便说一句,ECMAScript specification 没有任何用处,但我们可以阅读关于 Array.prototype.splice 的部分(第 15.4.4.12 节):

splice 函数是故意的 通用的;它不需要它的 this 值是一个数组对象。 因此可以转移到 其他类型的对象用作 方法。 splice函数是否 可以成功应用于主机 对象是依赖于实现的。

【讨论】:

  • 无论是否应用于ArrayArray.prototype.splice 总是返回Array。这是规范中的内容。
  • @Tim:是的,我知道,我谈到了 Firefox internal 表示,这可能与规范规定的不同。
  • Firebug 是用普通的 JavaScript 和 XUL 编写的。虽然在该环境中运行的 JavaScript 可以访问页面中运行的 JavaScript 无法访问的对象和扩展,但我无法想象它会偏离规范。更有可能的是 console.logconsole.debug 只是在设计上表现不同。如果您好奇,可以使用源代码。
【解决方案2】:

在 Firebug 1.6a12 中我得到

debug [0, 3, 1, 2]  blog.php (line 80)
log [0, 3, 1, 2]
debug [0, 2]        blog.php (line 85)
log [0, 2]

debug() 行包含指向console.debug() 行的源代码行的链接。

【讨论】:

    猜你喜欢
    • 2014-03-19
    • 2018-05-03
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    相关资源
    最近更新 更多