为什么node.js中的console.log在util.inspect没有正确打印数组时

时间:2015-09-01 14:23:41

标签: javascript node.js

以下两行产生以下输出:

console.log('arr:'+arr);
console.log('inspected arr:'+util.inspect(arr));
  

ARR:,testUser2
  检查过arr:[null,' testUser2' ]

是因为它以空值开头吗?它甚至不会显示为数组,这是非常令人困惑的 它实际上是一个数组!

3 个答案:

答案 0 :(得分:2)

这是因为您在数组中有null并且当您说

"somestring" + array

它使用toString()将数组转换为字符串,因此null将转换为""

只需在浏览器控制台[null,1,2].toString()中尝试,即可打印",1,2"

虽然Util.inspect 返回对象的正确字符串表示形式。它会将所有内容打印为类似JSON.stringify()的字符串。

答案 1 :(得分:2)

JS偶尔的强制规则。

一旦将其强制转换为字符串,括号就会消失,空值由零个字符表示。 Filesystem Size Used Avail Use% Mounted on /dev/xvda1 7.8G 4.8G 2.6G 65% / none 4.0K 0 4.0K 0% /sys/fs/cgroup udev 3.7G 12K 3.7G 1% /dev tmpfs 748M 336K 748M 1% /run none 5.0M 0 5.0M 0% /run/lock none 3.7G 0 3.7G 0% /run/shm none 100M 0 100M 0% /run/user /dev/xvdb 30G 45M 28G 1% /mnt 是指定您希望将其打印出来的正确方法"自然"表示。

答案 2 :(得分:0)

嗯,如果数组中的值为null,则尝试打印数组时的空字符串是正确的,符合ECMAScript中的规范here

当你尝试连接这样的数组时,实际上你所做的就是隐式调用数组对象中的toString函数,该函数将调用数组对象中的join函数。并且,在join规范中,函数应检查null值,如果null则应返回空字符串。

这取自文档。

  

如果element0未定义或为null,则令R为空String;否则,让R为ToString(element0)。

在你的情况下,我想使用util.inspect()要好得多,因为它打印更多"漂亮"信息。