最近开发的时候碰到个问题,使用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'
- undefined、任意的函数以及 symbol 作为对象属性值时 JSON.stringify() 对跳过(忽略)它们进行序列化
- undefined、任意的函数以及 symbol 作为数组元素值时,JSON.stringify() 将会将它们序列化为 null
- undefined、任意的函数以及 symbol 被 JSON.stringify() 作为单独的值进行序列化时,都会返回 undefined 参考: