You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复"不要从目标对象访问Object.prototype方法hasOwnProperty"报错

报错原因

这个报错不是JavaScript运行时的原生错误,是ESLint等代码校验工具的no-prototype-builtins规则拦截提示。
MDN的写法本身是合法的JavaScript语法,校验工具之所以限制这种写法,是为了规避两种边界场景的风险:

  • 如果目标对象是通过Object.create(null)创建的,它本身没有继承Object.prototype,原型链上不存在hasOwnProperty方法,直接调用会抛出未定义错误
  • 如果目标对象自身自定义了同名的hasOwnProperty属性/方法,会覆盖原型上的原生实现,导致执行逻辑不符合预期

修复方案

方案1:调用Object.prototype.hasOwnProperty并绑定this指向(兼容性最好)

const myObj = {
  prop1: 'val1',
  prop2: 'val2'
}

if (!Object.prototype.hasOwnProperty.call(myObj, 'prop3')) {
  myObj.prop3 = 'val3'
}

方案2:使用ES2022新增的Object.hasOwn()静态方法(写法更简洁)

如果你的运行环境支持ES2022及以上语法,推荐使用这个方案:

const myObj = {
  prop1: 'val1',
  prop2: 'val2'
}

if (!Object.hasOwn(myObj, 'prop3')) {
  myObj.prop3 = 'val3'
}

方案3:临时关闭ESLint规则(不推荐)

如果确认你的业务场景不会出现前面提到的边界风险,可以通过注释临时禁用对应校验规则:

const myObj = {
  prop1: 'val1',
  prop2: 'val2'
}

// eslint-disable-next-line no-prototype-builtins
if (!myObj.hasOwnProperty('prop3')) {
  myObj.prop3 = 'val3'
}

内容的提问来源于stack exchange,提问作者drake035

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 04:39:02