将 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)
- 您无法更改
const
的值。不要将 const 用于计数器。
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 of
或 for in
循环时,使用常量可能是个好主意:
for (const item of arr) { ... }
或...
for (const key in obj) { ... }
你可以摆脱它,因为在 for of
和 for in
循环中,索引在每次迭代开始时被初始化。请记住不要使用 for in
遍历字符串和数组(有序数据结构),因为它可能会弄乱元素的顺序(我从未发生过,但不能保证它不会)。
你在第二个 for 循环中有两个错误。
将 const index = 0
更改为 let index = 0
。 const
表示不能重新分配标识符,let
表示可以重新分配标识符。
将 index + 1
更改为之前的 index++
。 index++
实际上意味着 index = index + 1
使 index
每次执行 for 循环时递增 1。
它崩溃的原因是因为每次 for 循环去改变 index
它不能因为 const
不允许它改变。
我在禁用 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)
- 您无法更改
const
的值。不要将 const 用于计数器。 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 of
或 for in
循环时,使用常量可能是个好主意:
for (const item of arr) { ... }
或...
for (const key in obj) { ... }
你可以摆脱它,因为在 for of
和 for in
循环中,索引在每次迭代开始时被初始化。请记住不要使用 for in
遍历字符串和数组(有序数据结构),因为它可能会弄乱元素的顺序(我从未发生过,但不能保证它不会)。
你在第二个 for 循环中有两个错误。
将
const index = 0
更改为let index = 0
。const
表示不能重新分配标识符,let
表示可以重新分配标识符。将
index + 1
更改为之前的index++
。index++
实际上意味着index = index + 1
使index
每次执行 for 循环时递增 1。
它崩溃的原因是因为每次 for 循环去改变 index
它不能因为 const
不允许它改变。