以下两行产生以下输出:
console.log('arr:'+arr);
console.log('inspected arr:'+util.inspect(arr));
ARR:,testUser2
检查过arr:[null,' testUser2' ]
是因为它以空值开头吗?它甚至不会显示为数组,这是非常令人困惑的 它实际上是一个数组!
答案 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()
要好得多,因为它打印更多"漂亮"信息。