1、当replacer是一个函数时
let obj = {
name: 'kobe',
age: 38,
sex: 'male'
}
// 第二个参数称为replacer
let result = JSON.stringify(obj, function (key, value) {
console.log(key, value);
return value;
})
console.log(result);
运行结果:
输入结果可能会比较奇怪,为什么第一行会输入obj原对象呢?
因为当replacer(JSON.stringify的第二个参数称为replacer)是函数时,第一次参数并不是对象的第一个键值对,这个时候key 为空字符串,value 值是原对象。
作用:这个特性可以很好的处理不能被序列化的数据类型,打破JSON.stringify诸多特性。
const obj = { name: "wlh", male: undefined, special: Symbol("dd"), action: function () {return 666}}console.log(JSON.stringify(obj))const result = JSON.stringify(obj, (key, value) => { const type = typeof value switch (true) { case type === "undefined": return "undefined" case type === "symbol": return value.toString() case type === "function": return value.toString() default: break } return value;})console.log(result)结果:
2、当replacer是一个数组时
let obj = {
name: 'kobe',
age: 38,
sex: 'male'
}
let result = JSON.stringify(obj, ['name','age']);
console.log(result);运行结果:
作为数组时,该参数起到了类似过滤器的效果,只有在该数组中存在的字段最终才能被序列化。
学习记录
2019.12.30