为什么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.6
和linux
。
提前致谢。
这可能是一个错误。 没有什么好的理由可以区分。
为什么会发生? console.log
委托util.format
( 完全字面 ), format
区分第一个参数(可能是一个格式string)和其他的string。 你可以在这里find确切的algorithm。 基本上:
- 当第一个参数是一个string时,占位符被相应的值所取代,然后进一步的参数被邻接。 当它们是对象或符号时,它们被检查 ,但只是投射到string,否则连接。
- 当第一个参数不是string时,检查每个值,然后将它们连接在一起。
由于依赖于typeof
的对象检查,它不考虑函数是对象,并且你的函数被直接串起来 。 铸造和检查之间的这种差异也可以在其他值(例如console.log("0", "example")
vs console.log(0, "example")
)中观察到。