NodeJS:array.join的结果不正确

我注意到array.join与包含(\ r)字符的string数组的不正确的输出。 这是我的代码和输出:

var list = [ "one\r", "two\r", "three\r", "four\r"] console.log(list); // ok, output: [ 'one\r', 'two\r', 'three\r', 'four\r' ] console.log(list.join(',')); // incorrect, outputs: ,foure 

它在Chrome / Firefox的控制台中工作正常,只是不在nodejs中。 如果有问题,我在linux mint 18.3上使用节点6.11.3

我可以为此做一些解决方法,但是我更关心为什么会发生这种情况。

其实这个string在你的代码里成功的join了,输出结果“,foure”是由字符'\ r'引起的,叫做“linefeed”,在Linux / macOSterminal换行将光标移动到一行的开头。 :

  • “one \ r”输出:“one”
  • “一个\ r,两个\ r”输出:“两个”
  • “一,二,三,三”输出:“三”
  • “一”,“二”,“三”,“四”,“三”

最后一个字符“e”来自“三”, \r不是“新行”。 使用“\ n” Carriage Return来输出新行,并将其放入“join(',\ n')”中,而不是将其放入数组元素中。

 var list = [ "one", "two", "three", "four"]; console.log(list); // ok, output: [ 'one', 'two', 'three', 'four' ] console.log(list.join(',\n'));