JSON.stringify()转换后包含值为undefined数据丢失的问题

2,001 阅读1分钟

最近开发的时候碰到个问题,使用JSON.stringify()转换数据时,如果对象里面的值是undefined,这个值会丢失,

let arr=[]
let obj={a:1,b:2}
for(let i=0;i<10;i++){
    arr.push(obj)
}
arr.forEach(item=>item.d=undefined)
console.log(arr[0])
//{a: 1, b: 2, d: undefined}
console.log(JSON.stringify(arr[0]))
//{"a":1,"b":2}

然后就去看了下json.stringify的转换原理

并不是所有的数据类型的转换JSON都是支持的,因此部分不支持的就会被忽略掉,比如undefined

JSON.stringify(null) //'null'
JSON.stringify(true) //'true'
JSON.stringify(undefined) //undefined
JSON.stringify(function(){}) //undefined
JSON.stringify(NaN) //'null'
  1. undefined、任意的函数以及 symbol 作为对象属性值时 JSON.stringify() 对跳过(忽略)它们进行序列化
  2. undefined、任意的函数以及 symbol 作为数组元素值时,JSON.stringify() 将会将它们序列化为 null
  3. undefined、任意的函数以及 symbol 被 JSON.stringify() 作为单独的值进行序列化时,都会返回 undefined 参考: