最近开发时,碰到一个问题,我需要判断一个对象数组中是否至少有一个对象具有name属性。
然后理所当然的想到:
const hasName = objects.some(obj => obj.hasOwnProperty('name'))
console.log(hasName) // true/false
在上面的代码中,我们使用了对象的hasOwnProperty()方法来检查每个对象是否具有name属性。如果存在至少一个对象具有name属性,那么hasName变量的值就会是true。
理论上这个方法是没问题的,但是此时IDE提示代码错误。
Do not access Object.prototype method ‘hasOwnProperty’ from target object.eslint(no-prototype-builtins)
大概的意思的:不要直接使用对象原型上的方法,因为原型的方法可能会被重写。eslint不建议直接调用对象原型上的方法。
所以,这个并不是代码逻辑错误,而是eslint检测到代码不规范。你可以选择忽略提示,也可以修改代码避免。个人建议当然是修改代码,减少不规范代码。
由文档链接说明不难看出,修改代码也很简单。只需要把
obj.hasOwnProperty('name')
修改为
Object.prototype.hasOwnProperty.call(obj, 'name')
即可解决问题。