1. 程式人生 > 實用技巧 >Do not access Object.prototype method 'hasOwnProperty' from target object

Do not access Object.prototype method 'hasOwnProperty' from target object

在專案中直接使用物件的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)