问题:
报错信息:"Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-b"

原因:
ESLint 报错。
新版本的ESLint使用了禁止直接调用 Object.prototypes 的内置属性开关,说白了就是ESLint 配置文件中的 "extends": "eslint:recommended" 属性启用了此规则。
在ECMAScript 5.1中,新增了 Object.create,它支持使用指定的 [[Prototype]] 创建对象。Object.create(null) 是一种常见的模式,用于创建将用作映射的对象。当假定对象将包含来自Object.prototype 的属性时,这可能会导致错误。该规则防止直接从一个对象调用某些 Object.prototype 的方法。
此外,对象可以具有属性,这些属性可以将 Object.prototype 的内建函数隐藏,可能导致意外行为或拒绝服务安全漏洞。例如,web 服务器解析来自客户机的 JSON 输入并直接在结果对象上调用 hasOwnProperty 是不安全的,因为恶意客户机可能发送一个JSON值,如 {"hasOwnProperty": 1},并导致服务器崩溃。
解决方法:
state.hasOwnProperty(key)
转换成
Object.prototype.hasOwnProperty.call(state, 'key'))

本文探讨了ESLint的一项规则,即禁止直接从对象调用Object.prototype的方法,这一规则旨在避免潜在的安全风险。文中解释了为何新版本的ESLint会启用此规则,并提供了具体的示例来说明如何规避此限制。
192

被折叠的 条评论
为什么被折叠?



