打印每个值的短路

Short-Circuiting to Print Every Value

这是我的代码:

for (let i = 0; i <= 100; i++) {
  let output = "";

  if (i % 3 === 0) {
    output += "Cool";
  }
  if (i % 5 === 0) {
    output += "Breeze";
  }
  console.log(output || i);
}

在此代码中,我使用 for 循环将绑定 i 的值从 0 更改为 100。

在第一个 if 语句中,我使用模和加法赋值运算符将字符串 "Cool" 添加到绑定 output.

在第二个 if 语句中,我使用模和加法赋值运算符将字符串 "Breeze" 添加到绑定 output.

for 循环主体中的最后一条语句的功能是在浏览器控制台中打印输出绑定的值。我通过短路来做到这一点。现在,我理解了使用 "OR" 运算符短路的逻辑,因为解释器将短路比较两个操作数的完整逻辑,并自动选择左侧的操作数,如果它可以转换为 true,字符串和数字可以,所以操作数 output 总是会被选择。

我不明白的是为什么需要短路才能在控制台中明显地打印出每个值。如果我要使用 console.log(output); 语句,它会合并数字类型值,说明在必须打印字符串之前连续打印了多少。

有人可以解释一下这个逻辑吗?为什么这里需要短路来防止合并?

If I were to use the statement console.log(output); it consolidates the number type values, stating how many were printed in a row before it had to print a string.

如果其他人不清楚,你指的是这个:

这是 浏览器控制台 的产物,它将重复的日志合并在一起,使调试更容易。在这里,它合并了重复记录的空字符串。这不是您的代码逻辑的问题。如果您要通过 任何其他方法 记录输出,空白输出将如您所期望的那样连续显示,而不是聚集在一起:

const table = document.querySelector('table').children[0];

for (let i = 0; i <= 100; i++) {
  let output = "";

  if (i % 3 === 0) {
    output += "Cool";
  }
  if (i % 5 === 0) {
    output += "Breeze";
  }
  table.innerHTML += `<tr>Cell value: ${output}</tr>`;
}
<table>
  <tbody>
  </tbody>
</table>

您的代码非常好,您只需要找到一种方法来显示它 console.log 不同的,这样它不直观的聚集就不会把事情搞砸了。

您也可以通过取消选中来关闭分组 "Group Similar":