在nodejs'inspect'表现得像个保留字
In nodejs 'inspect' acts like a reserved word
在node.js中,对具有inspect
元素的对象调用console.log会打印undefined
,即使它仍然可以作为对象工作。我认为这是因为节点在内部使用inspect来打印内容。
var thingTwo = {
num: 1,
func: function (x) { 2; },
inspect: function (x) { "hi"; },
};
console.log(thingTwo); // undefined
为了避免将来出现这种陷阱,是否有一系列其他单词会破坏标准功能?
很酷,这激发了我的好奇心,事实上,有一个未记录的特性,对象可以提供自己的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
存在并且是触发行为的函数时,它才是。
如果对象具有inspect
属性并且它是一个函数,则console.log
将打印其返回值。
$ node
> console.log({ inspect: function() { return 'hi'; } });
hi
如果我们看看来源,我们会发现没有办法避免这种行为。如果对象的inspect
是一个函数,则console.log
将打印其返回值。
请注意,在Node 0.6.x及之前的版本中,console.log
实际上并没有打印undefined
,它只是打印一个空行。只有在REPL中执行此操作时,才会看到undefined
。
相关文章:
- 调试器;[错误]194:11:标识符是一个保留字
- 复杂Regex:如何穿't匹配//之后的保留字
- 在nodejs'inspect'表现得像个保留字
- 使用特征检测通过点表示法检查对保留字的支持
- 为什么“;闭合的“;保留字是JS
- 保留字行为
- 命名函数“;删除“..删除是一个保留字
- 自定义 eslint 规则抛出意外的保留字
- 在带有猫鼬的 JSLint 中抑制“预期标识符,而是看到”默认“(保留字)”
- 是否可以在JS中获取保留字(变量,函数,对象名称)的列表
- “parent”不应该用作javascript变量名(保留字)
- 如何在 dialog() 模式弹出窗口中的部分视图之间保留字段数据
- 为什么我的 JavaScript 哈希带有保留字“toString”作为显示 NaN 的键
- JavaScript 中的保留字列表
- self 在 JavaScript 中不是一个保留字 - 所以它是如何在没有在我的脚本中定义的的情况下使用它的
- 值为“错误”的字符串是某种保留字
- 意外使用保留字'让'在严格模式下
- JavaScript 模块 - 语法错误:export.runInThisContext 中的意外保留字
- 当代码包含保留字时,设置代码的CSS
- 电子,反应,webpack”;未捕获的语法错误:意外的保留字"