为什么 console.log() 不连接字符串?
Why doesn't console.log() concatenate strings?
在此示例中,我尝试在第一行打印一个星号,在第二行打印两个星号,依此类推:
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 *
这是为什么?
因为这基本上就是它的工作方式。每次调用 console.log
都会输出一个新的日志条目。每个日志条目都在其自己的行中。
如果多次记录同一个字符串,它们将被汇总到一个条目中,计数在前。
不要将 console.log
与 C# 或类似语言中的 Console.Write
搞错。更像是 Console.WriteLine
.
console.log
并非旨在精确控制输出的渲染。它是一个日志编写器,而不是终端布局API。
它将每条日志消息单独占一行,并将重复的、连续的日志消息折叠成一条消息,并在其旁边记录出现的次数。
之所以这样做,是因为为了清楚起见,开发工具就是这样处理同一值多次出现的。
您可以使用数组来实现您想要的效果。另请注意,我们将 j<i
更改为 j<=
以便它在 5 日输出。
然后,我们使用.join('')
方法将数组展平为字符串。
此外,由于我们在每个 迭代 循环中 console.logging,因此将自动添加一个新行,因为它是一个日志 per循环。
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);
}
在此示例中,我尝试在第一行打印一个星号,在第二行打印两个星号,依此类推:
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 *
这是为什么?
因为这基本上就是它的工作方式。每次调用 console.log
都会输出一个新的日志条目。每个日志条目都在其自己的行中。
如果多次记录同一个字符串,它们将被汇总到一个条目中,计数在前。
不要将 console.log
与 C# 或类似语言中的 Console.Write
搞错。更像是 Console.WriteLine
.
console.log
并非旨在精确控制输出的渲染。它是一个日志编写器,而不是终端布局API。
它将每条日志消息单独占一行,并将重复的、连续的日志消息折叠成一条消息,并在其旁边记录出现的次数。
之所以这样做,是因为为了清楚起见,开发工具就是这样处理同一值多次出现的。
您可以使用数组来实现您想要的效果。另请注意,我们将 j<i
更改为 j<=
以便它在 5 日输出。
然后,我们使用.join('')
方法将数组展平为字符串。
此外,由于我们在每个 迭代 循环中 console.logging,因此将自动添加一个新行,因为它是一个日志 per循环。
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);
}