gpt4 book ai didi

javascript - 什么决定 Node 是否打印 `[object Object]` 或完整对象?

转载 作者:行者123 更新时间:2023-12-03 07:03:57 25 4
gpt4 key购买 nike

小音符 : 我很熟悉console.log() , JSON.stringify() , Object.prototype.toString() , util.inspect()等等 - 这个问题不是问如何显示对象的内容,而是为什么 Node 的行为在不同情况下会发生变化。
我知道我可以 console.log(someObject)和 Node 将打印:

[object Object]
node js function return [object Object] instead of a string value有一些关于这方面的好信息。
我知道 [object Object]来自 Object.prototype.toString()我知道我可以 console.log(JSON.stringify(someObject, null, 2)和 Node 将打印:
{
foo: 'bar'
}
或使用 util.inspect()等见 this answer
然而 似乎有时 Node 实际上会打印对象内容
如果我创建一个名为 runme.js 的新文件内容: console.log({foo: 'bar'})并运行 node runme.js Node 将打印 { foo: 'bar' }不是 [object Object]为什么 Node 不打印 [object Object] ?
编辑 :根据基思的问题, [object Object]当我运行时会出现:
console.log(`Check me out ${{foo: 'bar'}}`)
日志 [object Object] 什么决定 Node 是否使用Object.prototype.toString() (又名 [object Object] )与打印对象的内容?

最佳答案

控制台日志将输出 [object Object]对于在作为参数传递给控制台方法之前转换为字符串的对象值,或者如果对象值参数被消耗并插入到作为第一个参数传递的格式字符串中。
如果格式字符串中包含类似 C 的百分比前缀转换序列,该序列使用下一个未使用的参数并将其嵌入格式字符串,则会发生后者。
如果使用格式字符串,并且传递给方法的(对象)参数多于格式字符串使用的参数,则作为对象的剩余未使用参数将记录为对象值,而不转换为字符串。
所以一些预期值和实际日志输出:

const someObject = {a: "a"};

// expected output: "string [object Object]"
console.log( "string " + someObject);

// expected output: "same deal: [object Object]"
console.log( "same deal: %s", someObject); // converted by format string

// expected output: 'someObject = {a: "a"}'
console.log( "someObject = ", someObject) // someObject was not consumed by format string!

当然,Node 不会在文本控制台上呈现交互式对象 View ,在简单的情况下,它看起来很像 JSON.stringify()输出。然而,Node 确实试图
  • 识别对象的构造函数,
  • 根据数据类型的颜色代码值
  • 处理循环引用的呈现

  • 将其调试潜力扩展到超越简单 JSON.stringify()转换。

    关于javascript - 什么决定 Node 是否打印 `[object Object]` 或完整对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64552472/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com