Javascript 在nodejs';检查';就像一个保留字

Javascript 在nodejs';检查';就像一个保留字,javascript,node.js,Javascript,Node.js,在node.js中,调用console.log时,如果对象中有一个名为inspect的元素,则即使该元素仍然作为对象工作,也会打印undefined。我假设这是因为node在内部使用inspect来打印内容 var thingTwo = { num: 1, func: function (x) { 2; }, inspect: function (x) { "hi"; }, }; console.log(thingTwo); // undefined 为了避免将来出现这个陷阱,

在node.js中,调用console.log时,如果对象中有一个名为
inspect
的元素,则即使该元素仍然作为对象工作,也会打印
undefined
。我假设这是因为node在内部使用inspect来打印内容

var thingTwo = {
  num: 1,
  func: function (x) { 2; },
  inspect: function (x) { "hi"; },
};

console.log(thingTwo);  // undefined

为了避免将来出现这个陷阱,有没有其他一些词会破坏标准功能

如果对象具有
inspect
属性并且是函数,
console.log
打印其返回值

$ node
> console.log({ inspect: function() { return 'hi'; } });
hi
如果我们看一下,我们会发现没有办法避免这种行为。如果对象的
inspect
是一个函数,
console.log
将打印其返回值

$ node
> console.log({ inspect: function() { return 'hi'; } });
hi


请注意,在节点0.6.x及之前的版本中,
console.log
实际上并不打印
undefined
,它只打印一个空行。如果您在中执行此操作,您只会看到
未定义的

很酷,这激起了我的好奇心,事实上,有一个未记录的特性,对象可以提供自己的
检查方法。有关守则载于:


也就是说,只有当
inspect
存在并且是一个触发行为的函数时,它才存在。

Node.js确实有一个inspect函数:-如果重命名inspect会发生什么?从未使用过Node.js,但不使用
console.log(thingTwo)
实际编写
“[对象对象]”
?@MaxArt-No.console.log输出对对象调用
inspect()
的返回值(如果对象有inspect方法)。@James Brooks是对的,似乎会导致问题。如果将inspect重命名为
console.log
works,则您的代码实际上会丢失一条返回语句。因此,
inspect()
(或者更确切地说,undefined)不会返回任何内容,并且会打印“undefined”。这是一个文件,请看另一个答案。@JamesBrooks:对不起,在节点0.6.x中是这样,但在节点0.8.x中不是这样。我注意到了,很好的发现。别以为你还知道这样的事。我花了很长时间才找到这个bug,我不想再被类似的东西搞砸了。不是从我脑子里想出来的,不是。我在
util.js
中也找不到任何可疑的东西。我会把你标记为答案,因为你已经找到了原因。Cheers@JamesBrooks我也花了2个小时找到了这个。我正在设置具有
inspect
方法的对象的属性<代码>控制台。日志
从未显示它。我调试了两个小时。