网站搜索

TypeScript - for 循环中的 const


所以我在 TypeScript 中写了一个 for 循环,像这样:

for (let item of itemList) {
    …
}

但是由于我安装了 tsLint,它建议我使用 const 而不是 let。

这是一个好的建议吗?我的意思是它可以和const一起使用,但这是你应该做的事情吗?

答案#1

这是一个好建议吗?我的意思是它可以与 const 一起使用,但这是你应该做的事情吗?

这完全取决于你和你的团队。

在这里使用 const 意味着你不能在循环体内给 item 重新赋值:

for (const item of itemList) {
    item = item.toUpperCase(); // Error
    // ...
}

在这里使用 let 意味着你可以:

for (let item of itemList) {
    item = item.toUpperCase(); // Works (well, if it's a string or...)
    // ...
}

(请注意,该赋值操作不会改变itemList,只是改变循环体内的变量。)

是否要在循环体内防止对 item 的赋值,既是风格问题,也取决于循环体内的代码执行了什么操作。


仅为避免疑义:const 适用于 绑定(大致相当于“变量”,例如 item)。例如,如果 itemList 是一个对象的可迭代对象,那么 const 并不意味着你不能改变 item 所指对象的状态。

const itemList = [
    {foo: 1},
    {foo: 2}
];
for (const item of itemList) {
    item.foo *= 2;  // Works
}

无论价值几何,内置的 ESLint 规则通常会解释为什么 ESLint 维护者认为该规则有用。在这种情况下,我怀疑是 prefer-const 规则,它给出了这样的理由:

如果一个变量从未被重新赋值,使用 const 声明更好。

const 声明告诉读者,“这个变量从未被重新赋值”,从而减轻认知负担并提高可维护性。

再次,这取决于你/你的团队是否同意这种推理。