JSON.stringify() 第二个参数的秘密

3,720 阅读1分钟

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