在此示例中,我尝试在第一行上打印一个星号,在第二行上打印两个,依此类推:
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 *
这是为什么?
答案 0 :(得分:3)
console.log
并非旨在精确控制输出的呈现。它是一个日志编写器,而不是终端布局API。
它将每条日志消息放在自己的一行上,并将重复的顺序日志消息折叠成一条消息,并计数其旁边发生的次数。
答案 1 :(得分:2)
因为基本上就是这种方式。对console.log
的每次调用都会输出一个新的日志条目。每个日志条目都在其自己的行中。
如果您多次记录相同的字符串,它们将被汇总为一个条目,且计数在最前面。
在C#或类似版本中,请勿将console.log
与Console.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);
}