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



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

由此:

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

对此:

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

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

(如果有人需要整个项目,那么我也可以,只要问!(

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

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

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

它崩溃的原因是因为每次for循环都无法更改index,因为const不允许它更改。

您不能更改const值,因此递增它应该会失败。迭代器应该使用let而不是const。有关常量,请参阅MDN文档。

index + 1

不会更改index,则循环是无限的。要增加,请执行

index += 1

不能将常量用于for循环索引。循环的工作方式是每次迭代都增加索引变量,但不能使用常量。您需要在此处使用let

此外,您更改了循环的第三部分,使其不会实际更改索引,因此现在您的循环将永远运行,它永远不会增加索引。

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

使用经典的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 (const index = 0; index < combinedUniqueIndexes.length; index + 1)
  1. 您不能更改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)

相关内容

最新更新