javascript - Object.hasOwnProperty() 产生 ESLint 'no-prototype-builtins' 错误 : how to fix?

标签 javascript ecmascript-6 eslint

我正在使用以下逻辑来获取给定键的 i18n 字符串。

export function i18n(key) {
  if (entries.hasOwnProperty(key)) {
    return entries[key];
  } else if (typeof (Canadarm) !== 'undefined') {
    try {
      throw Error();
    } catch (e) {
      Canadarm.error(entries['dataBuildI18nString'] + key, e);
    }
  }
  return entries[key];
}

我在我的项目中使用 ESLint。我收到以下错误:

Do not access Object.prototype method 'hasOwnProperty' from target object. It is a 'no-prototype-builtins' error.

如何更改我的代码以解决此错误?我不想禁用此规则。

最佳答案

您可以通过 Object.prototype 访问它:

Object.prototype.hasOwnProperty.call(obj, prop);

那应该更安全,因为

  • 并非所有对象都继承自 Object.prototype
  • 即使是从 Object.prototype 继承的对象,hasOwnProperty 方法也可能被其他东西覆盖。

当然,上面的代码假设

  • 全局对象没有被遮蔽或重新定义
  • 原生Object.prototype.hasOwnProperty没有被重新定义
  • 没有调用自己的属性被添加到Object.prototype.hasOwnProperty
  • 原生Function.prototype.call没有被重新定义

如果其中任何一个不成立,尝试以更安全的方式编码,您可能已经破坏了您的代码!

另一种不需要调用的方法是

!!Object.getOwnPropertyDescriptor(obj, prop);

关于javascript - Object.hasOwnProperty() 产生 ESLint 'no-prototype-builtins' 错误 : how to fix?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39282873/

相关文章:

javascript - 如果 div 为空,Eslint airbnb 会强制执行自关闭 div 标签。如何禁用此规则?

javascript - 仅将样式应用于特定选择选项

javascript - 如何允许任何泛型作为参数传递?

javascript - 使用 JS (ES6) 切换 Accordion /标签的问题

javascript - 扩展类时将对象作为元/标记传递。这是什么语法,它有什么作用?

javascript - express.js,如果删除下一个参数,错误处理程序将不起作用

javascript - 当多个 API 调用时只运行一次响应拦截器

javascript - 如何修改 ES6 类的构造函数

javascript - ES6 JavaScript 模板文字——它们能做什么和不能做什么

javascript - ESLint 解析和验证 JSDoc