短路打印每个值

问题描述 投票:0回答:1

这是我的代码:

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的情况下自动选择左侧的操作数,因此可以使用字符串和数字,因此始终将选择操作数输出

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

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

javascript for-loop modulo short-circuiting
1个回答
1
投票

如果我要使用语句console.log(output);它合并数字类型值,说明必须打印字符串之前连续打印了多少。

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

enter image description here

这是浏览器控制台的工件,它将重复的日志合并在一起,从而使调试更加容易。在这里,它正在合并重复的记录的空字符串。这与您的代码逻辑无关。如果要通过任何其他方法记录输出,则空白输出将按照您的期望顺序显示,而不是集中在一起:

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,以免其不直观的聚集不会弄乱事情。您还可以通过取消选中“相似组”来关闭分组:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.