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

以下两行产生以下输出:

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

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

是因为它是从一个空值开始的? 它甚至不显示为一个数组是非常令人困惑的。
它实际上是一个数组虽然!

那是因为你在数组中有null ,当你说

 "somestring" + array 

它使用toString()将数组转换为string,所以null将被转换为""

只要尝试在浏览器控制台[null,1,2].toString()它将打印",1,2"

而Util.inspect返回对象的正确string表示forms。 它将打印每一个string的东西像JSON.stringify()

JS的偶尔强制规则。

一旦将它强制转换为一个string,括号就消失,空值由零个字符表示。 inspect是指定你想要它打印出它的“自然”表示的正确方法。

那么,如果数组中的值为null,则尝试打印数组时,空string按照ECMAScript中的规范

当你尝试像这样连接数组时,实际上你所做的就是隐式地调用数组对象中的toString函数,它将调用数组对象中的join函数。 而且,在join规范中,函数应该检查null值,如果为null那么它应该返回空string。

这是从文档中获取的。

如果element0是未定义的或null,则让R为空string; 否则,设R是ToString(element0)。

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