1. 程式人生 > 資訊 >中國跨境電商 Shein 在美遭遇智慧財產權糾紛:被指銷售假冒商品

中國跨境電商 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])
        }
      }