中國跨境電商 Shein 在美遭遇智慧財產權糾紛:被指銷售假冒商品
轉載於:https://blog.csdn.net/qq_36727756/article/details/105464902
錯誤寫法:
const formData = new FormData() fileList.forEach(file => { formData.append('file', file) }) for (var prop in this.formDataAll) { if (this.formDataAll.hasOwnProperty(prop)) { formData.append(prop, this.formDataAll[prop]) } }
今天用物件的屬性hasOwnProperty,去判斷物件是否包含該值,我這裡主要判斷物件是否為空,出現了以上錯誤,之前也遇到過類似的錯誤,如parseInt(‘24.5’),必須要給轉換的進位制型別,改為parseInt(‘24.5’,10)則正常
通過上述文字提示發現,不要從目標物件訪問 Object 原型方法”,想到一種解決方案——直接找到這個方法,用 call 改變指向呼叫:
Object.prototype.hasOwnProperty.call(obj, 'key')
在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”)。
正確寫法:
const formData = new FormData() fileList.forEach(file => { formData.append('file', file) }) for (var prop in this.formDataAll) { if (Object.prototype.hasOwnProperty.call(this.formDataAll, prop)) { formData.append(prop, this.formDataAll[prop]) } }