Javascript 函数是对象吗?为什么console.log不显示可检查对象?

Javascript 函数是对象吗?为什么console.log不显示可检查对象?,javascript,Javascript,我认为函数foo是一个对象,但为什么Chrome中的console.log显示“function(){}”而不是一个可检查的对象呢?在记录函数时,是否仍要显示可检查的对象?当您调用console.log(foo)时,控制台会生成一个非规范化的显示(它不是EcmaScript的一部分)。在大多数情况下(但不适用于基本对象),它调用参数的toString函数(但做更多的工作,如为字符串添加引号、设置颜色、提供对象浏览等) 函数的toString函数只打印代码 >>>>cons

我认为函数foo是一个对象,但为什么Chrome中的console.log显示
“function(){}”
而不是一个可检查的对象呢?在记录函数时,是否仍要显示可检查的对象?

当您调用
console.log(foo)
时,控制台会生成一个非规范化的显示(它不是EcmaScript的一部分)。在大多数情况下(但不适用于基本对象),它调用参数的
toString
函数(但做更多的工作,如为字符串添加引号、设置颜色、提供对象浏览等)

函数的
toString
函数只打印代码

>>>>console.log(foo);
function()
>>>>console.dir(foo);
a            "an attribute"
prototype    Object { }
如果要查看所有属性,可以这样做

var foo = function () {};
foo.a = "an attribute";  // set attribute to prove foo is an object
console.log(foo)  // log shows: function () {};
或()

对于其他具有专用
toString
函数的对象,您会看到相同的现象

例如:

console.log("%O", foo);
使用
console.dir()
查看
a

var a = new Number(3);
a.b = 4;
console.log(a); // logs just 3
console.dir(a); // lets you see b

戴斯特罗伊是对的。函数是一个对象,其toString打印代码

>>>>console.log(foo);
function()
>>>>console.dir(foo);
a            "an attribute"
prototype    Object { }

我想它不会调用
toString
。控制台只是格式化它认为合适的值。毕竟
console.log({})
不显示
[object object]
(至少在Chrome中是这样)。@FelixKling事实上这取决于。。。我正在看。我还测试了
Object.prototype.toString.apply(foo)
wow,感谢console.log(“%O”,foo);,我从来不知道有一个%OOK,我的意思是它不仅调用
toString
;)例如,对于数组,Chrome还显示
未定义的x2
速记。@FelixKling我不是说你错了。我尝试了许多案例,并试图找到一个通用公式。
console.log(foo.a);