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

时间:2017-06-12 05:55:04

标签: javascript node.js

以下代码:

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定义了类字段。当我在console.log()个不同的参数列表中node时,F的打印结果会有所不同。
一个是function F() { },另一个是{ [Function: F] value: [ 1, 2, 3, 4 ] }。那就是为什么呢? 但是浏览器控制台中的输出相同。 我的node版本为v4.2.6linux

提前致谢。

1 个答案:

答案 0 :(得分:2)

这可能是一个错误。没有充分的理由可以区别开来。

为什么会这样? console.log代表util.formatquite literally),format区分第一个参数的字符串(可能是格式字符串)和其他内容。您可以找到确切的算法here。基本上是:

  • 当第一个参数是字符串时,占位符将被相应的值替换,然后连接其他参数。当它们是对象或符号时,它们是inspected,但只是转换为字符串并以其他方式连接。
  • 当第一个参数不是字符串时,会检查每个值,然后将它们连接在一起。

由于对象检查依赖于typeof,因此它不会将函数视为对象,并且您的函数直接stringified。对于其他值,也可以观察到铸造和检查之间的差异(例如console.log("0", "example")console.log(0, "example"))。