node.js REPL如何字符串化输出?

时间:2014-11-21 15:12:07

标签: node.js read-eval-print-loop stringify

node.js REPL如何对其打印的对象进行字符串化?在使用包含键值对(?!)的数组遇到这种奇怪之后,我变得很好奇:

> var arr = [1]
undefined
> arr
[ 1 ]
> arr.key = "value"
'value'
> arr
[ 1, key: 'value' ]

典型的功能似乎不会产生[ 1, key: 'value' ]

> arr.toString()
'1'
> JSON.stringify(arr)
'[1]'
> require("util").inspect(arr, {showHidden: true})
'[ 1, [length]: 1, key: \'value\' ]'

最后一个几乎是,但还有[length](澄清一下,引号显然不重要)。我正在运行节点 v0.10.33

1 个答案:

答案 0 :(得分:2)

你几乎就在那里; util.inspect返回一个字符串,并在没有showHidden的情况下调用:

> require("util").inspect(arr)
'[ 1, key: \'value\' ]'
> console.log( require("util").inspect(arr) )
[ 1, key: 'value' ]

如果您将字符串记录到控制台,它将用引号括起来,但console.log不会这样做。如果您要验证inspect的输出与console.log的输出完全相同,请将> require("fs").writeFileSync("dump.txt", require("util").inspect(arr)); 的输出写入文件:

$ cat dump.txt
[ 1, key: 'value' ]

在你的控制台中:

var fn = function() {}
fn.key = "value";

关于第一段:

  

包含键值对的数组(?!):

不奇怪 - 数组是对象,所以它非常有效。但是对于查看代码的其他人来说可能会让人感到困惑。 : - )

这样做与此没什么不同:

{{1}}

如果您要记录它,它看起来就像您的数组示例。