天天看點

JSON.stringify 函數與 Object.defineProperty 的坑:不可枚舉屬性無法寫入

例子

const obj = {}
Object.defineProperty(obj, 'prop', {
  value: 10
})
JSON.stringify(obj) // 輸出:{}
           

原因

好多部落格介紹的是 “不可枚舉” 的屬性不會寫入字元串,我也知道

function

、日期、正則等無法寫入,可萬萬沒想到自己寫的

Object.defineProperty

函數也是造成 JSON 無法序列化的原因,那就是一個非常重要的選項:

enumerable

改進

const obj = {}
Object.defineProperty(obj, 'prop', {
  value: 10,
  enumerable: true // 預設是 false,即不可枚舉這個屬性,在這裡吃了大虧
})
JSON.stringify(obj) // 輸出:{ prop: 10 }
           

繼續閱讀