我有一个带有一些键和值的对象。
我最初有这个循环:
for(const key in commands) {
if (commands.hasOwnProperty(key)) {
const value = commands[key];
// Do something else
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我以下的错误提示:
for..in循环遍历整个原型链,这实际上并不是您想要的。使用Object。{keys,values,entries},然后遍历结果数组。(无限制语法)
所以我将其更改为:
Object.keys(commands).forEach(key => {
if (commands.hasOwnProperty(key)) {
const value = commands[key];
}
});
Run Code Online (Sandbox Code Playgroud)
现在,由于出现以下错误hasOwnProperty
:
不要从目标对象访问Object.prototype方法'hasOwnProperty'。(无原型内置)
我如何编写一个简单的循环来遍历键,同时避免出现错误?
使用时Object.keys
,无需检查hasOwnProperty
。Object.keys产生一个专有属性数组。这就是为什么第一个eslint错误建议您使用它的原因。
对于第二个皮棉错误,建议您这样做
Object.prototype.hasOwnProperty.call(commands, key)
Run Code Online (Sandbox Code Playgroud)
此规则存在的原因commands.hasOwnProperty
是undefined
,如果使用创建命令,则可能存在Object.create(null)
。不过,就您而言,您只需要删除检查:
Object.keys(commands).forEach(key => {
const value = commands[key];
// Do something else
});
Run Code Online (Sandbox Code Playgroud)