javascript - 函数抛出 eslint.org guard-for-in 错误
问题描述
使用这个 for 循环来构建一个没有问题的查询字符串。
for (const key in parameters) {
const value = parameters[key];
qs += `${encodeURIComponent(key)}=${encodeURIComponent(value)}&`;
}
直到现在我注意到 ESLint 的红色衬里。该文档说明了以下内容:
https://eslint.org/docs/rules/guard-for-in
/*eslint guard-for-in: "error"*/
for (key in foo) {
if (Object.prototype.hasOwnProperty.call(foo, key)) {
doSomething(key);
}
}
for (key in foo) {
if ({}.hasOwnProperty.call(foo, key)) {
doSomething(key);
}
}
~
解决方案
只需像这样将代码包装在 for 循环中
for (const key in parameters) {
if (!parameters.hasOwnProperty(key)) { continue; }
const value = parameters[key];
qs += `${encodeURIComponent(key)}=${encodeURIComponent(value)}&`;
}
parameters.hasOwnProperty(key)
检查对象中是否存在属性/键parameters
但这可能仍然不是您想要的,因为 eslint 现在说:for..in loops iterate over the entire prototype chain, which is virtually never what you want. Use Object.{keys,values,entries}, and iterate over the resulting array.eslintno-restricted-syntax
正如那里所建议的,这 lints 干净:
Object.keys(parameters).forEach((key) => {
const value = parameters[key];
qs += `${encodeURIComponent(key)}=${encodeURIComponent(value)}&`;
});