Do not access Object.prototype method 'hasOwnProperty' from target object
阿新 • • 發佈:2020-09-07
在專案中直接使用物件的hasOwnProperty 屬性判斷物件是否包含該值,用eslint fix 修復程式碼的時候報如下的錯。
是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
呼叫這些方法。
最終修改結果如下:
Object.prototype.hasOwnProperty.calll(state,key)