JS 为什么当条件为 A&&B 时 FOR 循环不迭代但在 B&&A 时工作(A==B==true)

JS why FOR LOOP not iterating when condition is A&&B but works when B&&A (A==B==true)

这是我的第一个问题,大家好!

我想以尽快终止循环的方式编写条件。

循环不起作用但应该更快地终止循环:

for (
      let i = 0;
      transactionsSortedByTime[i].unixTime <= unixEndTime && i < listLength;
      i++
    ) {}

有效的循环:

for (
      let i = 0;
       i < listLength && transactionsSortedByTime[i].unixTime <= unixEndTime;
      i++
    ) {}

直到现在我确定 A&&B 和 B&&A 的结果是相同的,但在不同的时间以假结果终止(当其中一个 {A 或 B} 为假时)。

我的问题是为什么第二个循环正确迭代而第一个循环没有。

在您的例子中,A & BB & A 不同,因为在第一个代码片段中,您在检查是否 i 小于 listLength。当 i < listLength 为假时,这样做会给你 undefined 。

所以 i < listLength 应该写在 transactionsSortedByTime[i].unixTime <= unixEndTime 之前,以确保您的代码不会尝试访问超出 transactionsSortedByTime 数组范围的索引。

只需添加 (),循环结构显然采用第一个表达式的 bool 值,要解决此问题,您必须添加括号,以便您的表达式采用 && 运算符的值:

for (
  let i = 0;
  (transactionsSortedByTime[i].unixTime <= unixEndTime && i < listLength);
  i++
) {}