FireBug的console.log()和console.debug()有什么区别?

时间:2010-06-16 12:36:44

标签: javascript firefox console firebug

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

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()方法之前略有不同。正因为如此,我失去了几个小时,因为我认为拼接行为很有趣,使我的阵列多维或类似。

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

2 个答案:

答案 0 :(得分:9)

如果您查看文档it says

  

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

     

有关更多信息,另请参阅Console API   关于不同的信息   命令。

console.log处的shows页面上查看:

  

如果记录了对象,它们将是   不是作为静态文本写的,而是作为   可以的交互式超链接   单击以检查对象   Firebug的HTML,CSS,脚本或DOM   标签。

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

BTW,ECMAScript specification没有任何用处,但我们可以在关于Array.prototype.splice(第15.4.4.12节)的部分中阅读:

  

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

答案 1 :(得分:1)

在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()行的源行的链接。