在node.js中,调用具有名为inspect
的元素的对象上的console.log会打印undefined
,即使它仍然作为对象运行。我假设这是因为节点在内部使用inspect来打印东西。
var thingTwo = {
num: 1,
func: function (x) { 2; },
inspect: function (x) { "hi"; },
};
console.log(thingTwo); // undefined
为了避免将来出现此陷阱,是否有其他单词列表会破坏标准功能?
答案 0 :(得分:4)
很酷,这引起了我的好奇心,事实上,有一个没有记录的功能,其中一个对象可以提供它自己的inspect
方法。 util.js中的相关代码:
function formatValue(ctx, value, recurseTimes) {
// Provide a hook for user-specified inspect functions.
// Check that value is an object with an inspect function on it
if (value && typeof value.inspect === 'function' &&
// Filter out the util module, it's inspect function is special
value.inspect !== exports.inspect &&
// Also filter out any prototype objects using the circular check.
!(value.constructor && value.constructor.prototype === value)) {
return String(value.inspect(recurseTimes));
}
即,仅当inspect
存在且是触发行为的函数时才会出现。
答案 1 :(得分:0)
如果某个对象具有inspect
属性且,则它是一个函数,console.log
将打印其返回值。
$ node
> console.log({ inspect: function() { return 'hi'; } });
hi
如果我们查看the source,我们会发现无法避免此行为。如果对象的inspect
是函数,console.log
将打印其返回值。
请注意,在Node 0.6.x及之前,console.log
实际上并不打印undefined
,它只是打印一个空行。如果您在REPL中执行此操作,则只会看到undefined
。