Do not access Object.prototype method ‘hasOwnProperty’ from target object no-prototype-builtins


Do not access Object.prototype method ‘hasOwnProperty’ from target object no-prototype-builtins

 2020年01月08日 分類:JavaScript/React/前端設計  評論(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中,新增了 Object.create,它支持使用指定的 [[Prototype]] 創建對象。Object.create(null) 是一種常見的模式,用於創建將用作映射的對象。當假定對象將包含來自Object.prototype 的屬性時,這可能會導致錯誤。該規則防止直接從一個對象調用某些 Object.prototype 的方法。

此外,對象可以具有屬性,這些屬性可以將 Object.prototype 的內建函數隱藏,可能導致意外行為或拒絕服務安全漏洞。例如,web 服務器解析來自客戶機的 JSON 輸入並直接在結果對象上調用 hasOwnProperty 是不安全的,因為惡意客戶機可能發送一個JSON值,如 {"hasOwnProperty": 1},並導致服務器崩潰。

為了避免這種細微的 bug,最好總是從 Object.prototype 調用這些方法。例如,foo.hasOwnProperty("bar") 應該替換為 Object.prototype.hasOwnProperty.call(foo, "bar")

所以,你可以關閉提示,也可以更新代碼,個人建議更新代碼,畢竟代碼不規范引起的。

參考地址: https://cn.eslint.org/docs/rules/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM