将 let 更改为 const 并在 for 循环中将 i++ 更改为 i+1 后出错

Error after changing let to const and changing i++ with i+1 in a for loop

我在禁用 tslint 一段时间后进行编码,稍后启用它时,我看到了一些错误并修复了它。

来自这里:

for (let index = 0; index < combinedUniqueIndexes.length; index++)

为此:

for (const index = 0; index < combinedUniqueIndexes.length; index + 1)

但是这样做之后我的代码就崩溃了!我不知道我做错了什么! 请帮助这个可怜的灵魂!

(如果有人需要整个项目我也可以给,尽管问!)

 index + 1

不改变index,你的循环是无限的。要增加,做

 index += 1

您无法更改 const 值,因此增加它 应该 失败。您应该使用 let 而不是 const 作为迭代器。请参阅 const 的 MDN 文档。

您不能将常量用于 for 循环索引。循环通过每次迭代递增索引变量来工作,但你不能用常量来做到这一点。你需要在这里使用let

此外,您将循环的第 3 部分更改为实际上不改变索引,因此现在您的循环将永远运行它永远不会增加索引。

你需要回到原来的样子。你改变这个的原因是什么?

你的for循环有两个问题

for (const index = 0; index < combinedUniqueIndexes.length; index + 1)
  1. 您无法更改 const 的值。不要将 const 用于计数器。
  2. index+1 您没有将表达式的值重新赋值给索引。所以索引将始终相同。

所以你应该使用类似这样的代码

for (let index = 0; index < combinedUniqueIndexes.length; index++)

for (let index = 0; index < combinedUniqueIndexes.length; index += 1)

for (let index = 0; index < combinedUniqueIndexes.length; index = index + 1)

当您使用经典的 C 风格 for 循环时,索引不能是常量,因为它在每次迭代时都会递增(或递减)。

for (let i=0; i < length; i++) { ... }

不推荐使用var来声明和初始化索引,因为它会存在于循环范围之外。通常,let 更安全,var 会产生难以检测的错误。

但是,当您使用 for offor in 循环时,使用常量可能是个好主意:

for (const item of arr) { ... }

或...

for (const key in obj) { ... }

你可以摆脱它,因为在 for offor in 循环中,索引在每次迭代开始时被初始化。请记住不要使用 for in 遍历字符串和数组(有序数据结构),因为它可能会弄乱元素的顺序(我从未发生过,但不能保证它不会)。

你在第二个 for 循环中有两个错误。

  1. const index = 0 更改为 let index = 0const表示不能重新分配标识符,let表示可以重新分配标识符。

  2. index + 1 更改为之前的 index++index++ 实际上意味着 index = index + 1 使 index 每次执行 for 循环时递增 1。

它崩溃的原因是因为每次 for 循环去改变 index 它不能因为 const 不允许它改变。