对于以下代码:
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.6
和linux
。
提前谢谢。
一个错误。没有充分的理由提出不同意见。
为什么会这样? console.log
委托给util.format
(字面意思(,format
区分第一个参数的字符串(可能是格式字符串(和其他参数。您可以在此处找到确切的算法。基本上:
- 当第一个参数是字符串时,占位符将替换为相应的值,然后附加其他参数。当它们是对象或符号时,会检查它们,但只是转换为字符串并以其他方式连接。
- 当第一个参数不是字符串时,将检查每个值,然后将它们连接在一起。
由于对象检查依赖于typeof
,它不认为函数是对象,你的函数是直接字符串化的。铸造和检测之间的这种差异也可以观察到其他值(例如 console.log("0", "example")
与console.log(0, "example")
(。