var foo = function () {};
foo.a = "an attribute"; // set attribute to prove foo is an object
console.log(foo) // log shows: function () {};
我以为函数foo是一个对象,但为什么在Chrome的console.log中显示的是"function () {}"而不是可检查的对象?是否有办法在记录函数时显示可检查的对象?
var foo = function () {};
foo.a = "an attribute"; // set attribute to prove foo is an object
console.log(foo) // log shows: function () {};
console.log(foo)
时,控制台会构建一个非规范化的显示(它不是EcmaScript的一部分)。在大多数情况下(但对于基本对象不是这样),它调用参数的toString
函数(但会执行更多工作,例如为字符串添加引号、设置颜色、提供对象浏览等)。toString
函数只是打印代码。console.dir(foo);
console.log("%O", foo);
如果其他对象有专门的 toString
函数,您也会看到相同的现象。
例如:
var a = new Number(3);
a.b = 4;
console.log(a); // logs just 3
console.dir(a); // lets you see b
console.dir()
来查看 a
。>>>>console.log(foo);
function()
>>>>console.dir(foo);
a "an attribute"
prototype Object { }
console.log(foo.a);
会奏效的
toString
方法。控制台只是根据自己的格式化规则来显示值。毕竟,console.log({})
在 Chrome 中并不会显示[object Object]
。 - Felix KlingObject.prototype.toString.apply(foo)
。 - Denys SégurettoString
;) 例如,对于数组,Chrome 还显示undefined x 2
简写。 - Felix Klingconsole.dir
,一直以来都使用console.log
,认为其中有些魔法。从现在开始,每当需要检查对象时,我应该使用console.dir
。因为在某些代码情况下,使用console.log
不能像以前那样显示所有属性。 - haxpor