Angular项目中ESLint报guard-for-in错误的问题咨询
解决ESLint guard-for-in报错问题
ESLint的guard-for-in规则要求for-in循环的全部代码块必须包裹在检查对象自身属性的if语句中,目的是避免遍历到原型链上的继承属性。你当前的代码里isEmptyObject = true语句位于hasOwnProperty判断之外,违反了这条规则。
修改后的代码
private calculateFieldValue(value: any): any { let isEmptyObject = true; if (value && Array.isArray(value) && value.length === 1 && value[0]) { for (const subAttr in value[0]) { if (value[0].hasOwnProperty(subAttr)) { if (value[0][subAttr]) { isEmptyObject = false; break; } } } } return isEmptyObject ? null : value; }
关键修改说明
- 调整
isEmptyObject初始值为true,逻辑改为只要对象有一个自身属性不为空,就标记为非空对象,更贴合业务场景 - 将for-in循环的所有执行代码包裹在
hasOwnProperty判断块内,完全满足guard-for-in规则要求 - 避免了原型链上的属性干扰判断结果,代码逻辑更健壮
内容的提问来源于stack exchange,提问作者Prasad Parab
相关产品推荐
相关产品推荐

