DonotaccessObject.prototypemethod‘hasOwnPrope。。。
2020年01⽉08⽇分类://  评论(0)  阅读(75)
今天在升级项⽬依赖发现报如下错误:
Do not access Object.prototype method ‘hasOwnProperty’ from target object no-prototype-builtins
发现是新版本的ESLint使⽤了禁⽌直接调⽤Object.prototypes的内置属性开关,说⽩了就是ESLint 配置⽂件中的"extends":
"eslint:recommended"属性启⽤了此规则。
在ECMAScript 5.1中,新增了ate,它⽀持使⽤指定的[[Prototype]]创建对象。ate(null)是⼀种常见的模式,⽤于创建将⽤作映射的对象。当假定对象将包含来⾃Object.prototype的属性时,这可能会导致错误。该规则防⽌直接从⼀个对象调⽤某些Object.prototype的⽅法。
此外,对象可以具有属性,这些属性可以将Object.prototype的内建函数隐藏,可能导致意外⾏为或拒绝服务安全漏洞。例如,web 服务器解析来⾃客户机的 JSON 输⼊并直接在结果对象上调⽤hasOwnProperty是不安全的,因为恶意客户机可能发送⼀个JSON值,
函数prototype如{"hasOwnProperty": 1},并导致服务器崩溃。
为了避免这种细微的 bug,最好总是从Object.prototype调⽤这些⽅法。例如,foo.hasOwnProperty("bar")应该替换
为Object.prototype.hasOwnProperty.call(foo, "bar")。
所以,你可以关闭提⽰,也可以更新代码,个⼈建议更新代码,毕竟代码不规范引起的。