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

提前谢谢。

这可能是

一个错误。没有充分的理由提出不同意见。

为什么会这样? console.log委托给util.format(字面意思(,format区分第一个参数的字符串(可能是格式字符串(和其他参数。您可以在此处找到确切的算法。基本上:

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

由于对象检查依赖于typeof,它不认为函数是对象,你的函数是直接字符串化的。铸造和检测之间的这种差异也可以观察到其他值(例如 console.log("0", "example")console.log(0, "example")(。

最新更新