一般大家使用JSON.stringfy()只用到了第一个参数,把对象转成json格式

但是JSON.stringfy()还有后面的两个参数:JSON.stringfy(value, replacer, space)

value:要转化的对象

replacer:传函数-->被序列化的值的每个属性都会经过该函数的转换和处理

      传数组-->在这个数组中的属性名才会被序列化到最终的 JSON 字符串中

      传null或者不传-->对象所有的属性都会被序列化

var obj = {
  name: "lili",
  money: 17025,
  sex: "女"        
}
// 不转money值,并且在sex值加上“性别”二字
JSON.stringify(obj,(key,value) => {
   if (key === "money") {
        return undefined;
    } 
   if (key === "sex") {
        return "性别:"+value
    } 
    return value
})

// '{"name":"lili","sex":"性别:女"}'

space:传数字-->则在字符串化时每一级别会比上一级别缩进多这个数字值的空格(最多 10 个空格)

     传字符串-->则每一级别会比上一级别多缩进该字符串(或该字符串的前 10 个字符)

 

toJSON方法:

如果要转化的对象拥有 toJSON 方法,那么toJSON方法就会覆盖该对象默认的序列化行为:不是该对象被序列化,而是调用 toJSON方法后的返回值会被序列化

直接看例子吧:

var obj = {
  name: 'lili',
  toJSON: function () {
    return 'lalala';
  }
};
JSON.stringify(obj);      // '"lalala"'
JSON.stringify({test: obj}); // '{"test":"lalala"}'