为什么console.log()不连接字符串?

时间:2018-10-21 11:47:04

标签: javascript console.log

在此示例中,我尝试在第一行上打印一个星号,在第二行上打印两个,依此类推:

var n = 5;
for (i = 0; i < n; i++) {
  for (j = 0; j < i; j++) {
    console.log('*');
  }
  console.log('\r\n');
}

输出应如下所示:

*
**
***
****
*****

但是在Chrome控制台中,我看到了这一点:

*
2 *
3 *
4 *
5 *

这是为什么?

3 个答案:

答案 0 :(得分:3)

console.log并非旨在精确控制输出的呈现。它是一个日志编写器,而不是终端布局API。

它将每条日志消息放在自己的一行上,并将重复的顺序日志消息折叠成一条消息,并计数其旁边发生的次数。

答案 1 :(得分:2)

因为基本上就是这种方式。对console.log的每次调用都会输出一个新的日志条目。每个日志条目都在其自己的行中。

如果您多次记录相同的字符串,它们将被汇总为一个条目,且计数在最前面。

在C#或类似版本中,请勿将console.logConsole.Write混淆。更像Console.WriteLine

答案 2 :(得分:2)

之所以这样做,是因为开发工具是为了清楚起见而处理多次出现的相同值的情况。

您可以使用数组来获得想要的效果。另外请注意,我们将j<i更改为j<=,使其在第5位输出。

然后,我们使用.join('')方法将数组展平为字符串。

此外,由于我们在每个 iteration 循环上进行console.logging,因此将自动添加新行,因为它是每个 循环一个日志。

var n = 5;
for (i = 0; i < n; i++) {
  var arr = [];
  for (j = 0; j <= i; j++) {

    arr.push('*');

  }
  console.log(arr.join(''));
}

请注意,如果将其打印到DOM中,则不需要数组-它可以按您最初的意图工作。

更新:Ivar也是一个很好的解决方案,那就是使用String.repeat()函数,该函数只需要使用一个循环即可。

var n = 5;
for (i = 1; i <= n; i++) {
  var str = '*';
  str = str.repeat(i);
  console.log(str);
}