Do not access Object.prototype method‘hasOwnProperty’ from target object no-prototype-builtins
阿新 • • 發佈:2020-07-08
寫專案時發現如下錯誤:
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")。
所以,你可以關閉提示,也可以更新程式碼,個人建議更新程式碼,畢竟程式碼不規範引起的。