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 & B
与 B & 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++
) {}
这是我的第一个问题,大家好!
我想以尽快终止循环的方式编写条件。
循环不起作用但应该更快地终止循环:
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 & B
与 B & 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++
) {}