为什么nodejs console.log对于同一个对象有不同的输出格式?

对于下面的代码:

function F() { } // Define class fields for F F.value = [ 1, 2, 3, 4 ]; console.log('F', F); // F function F() { } console.log(F); // { [Function: F] value: [ 1, 2, 3, 4 ] } 

在上面的代码中,我为构造函数F定义了类字段。 当我在node不同参数列表中的console.log()时, F的打印结果是不同的。
一个是function F() { } ,另一个是{ [Function: F] value: [ 1, 2, 3, 4 ] } 。 所以这就是为什么?
但是在浏览器控制台中的输出是一样的。 我的node版本是v4.2.6linux

提前致谢。

这可能是一个错误。 没有什么好的理由可以区分。

为什么会发生? console.log委托util.format ( 完全字面 ), format区分第一个参数(可能是一个格式string)和其他的string。 你可以在这里find确切的algorithm。 基本上:

  • 当第一个参数是一个string时,占位符被相应的值所取代,然后进一步的参数被邻接。 当它们是对象或符号时,它们被检查 ,但只是投射到string,否则连接。
  • 当第一个参数不是string时,检查每个值,然后将它们连接在一起。

由于依赖于typeof的对象检查,它不考虑函数是对象,并且你的函数被直接串起来 。 铸造和检查之间的这种差异也可以在其他值(例如console.log("0", "example") vs console.log(0, "example") )中观察到。