JSON.stringify

在日常开发中,undefined一般代表未声明或未初始化,可以说是一个无效值, 会引起不必要的代码报错。数据值不存在时,可以返回空字符串或者null
但因目前大部分定义接口时都不够规范,返回值也是多种多样,在规范得不到很好落实的时候,就需要双方做好容错处理,所以深入学习了JSON.stringify

JSON.stringify()的基础用法

  1. 语法JSON.stringify(value[, replacer[, space]])
  2. 说明:将对象 \ 值转换为字符串
    指定replacer为函数 => 选择性的替换
    指定replacer为数组 => 转换指定的(数组中包含的)属性
  3. 基本功能使用code
// 指定replacer为函数, 当返回值中undefined需要处理时可以使用该方法
JSON.stringify({"name": "emoji", age: undefined, sex: "girl"}, (key, value)=> {
  return typeof value === 'undefined' ? '' : value
});

{"name":"emoji","age":"","sex":"girl"}

// 指定replacer为数组,只过滤数组包含的属性
JSON.stringify({"name": "emoji", age: undefined, sex: "girl"}, ['name', 'sex']);

{"name":"emoji","sex":"girl"}

// 指定space美化输出
JSON.stringify({"name": "emoji", age: undefined, sex: "girl"}, ['name', 'sex'], 2);

{
  "name": "emoji",
  "sex": "girl"
}

特性:

关于包含undefined、任意的函数、symbol值

  1. undefined、任意的函数、symbol值,出现在非数组对象的属性值中时,在序列化过程中会被忽略
// 对象中存在会被忽略

let signInfo = [{fieldId: 539, value: undefined},{fieldId: 540, value: 'emoji'}];

JSON.stringify(signInfo);    // [{"fieldId":539},{"fieldId":540,"value":"emoji"}]
  1. undefined、任意的函数以及symbol值出现在数组中时会被转换成 null&NaNInfinity 格式的数值及null都会被当做null
// 数组中存在会被转为null

let signInfo = [{fieldId: 539, value: undefined},{fieldId: 540, value: 'emoji'}, Symbol('emoji'), function showName(){console.log("emoji");}]

JSON.stringify(signInfo);    //[{"fieldId":539},{"fieldId":540,"value":"emoji"},null,null]
  1. undefined、任意的函数以及symbol值被单独转换时,会返回undefined
// 单独转换返回undefined
JSON.stringify(undefined);    // undefined
JSON.stringify(()=>{return "a"});    // undefined
JSON.stringify(Symbol("emoji"));    // undefined

关于包含boolean、数字、字符串

1、布尔值、数字、字符串的包装对象在序列化过程中会自动转换成对应的原始值。

原生包装对象 Number、String、Boolean

JSON.stringify([new Number(1), new String("emoji"), new Boolean(false)])    // [1,"emoji",false]

其他

4、其他类型对象,如Map\Set,仅会序列化可枚举的属性
5、当尝试去转换BigInt类型的值会抛出错误
6、转换值如果有toJSON()方法,该方法定义什么值将被序列化

const toJSONObj = {
  name: 'emoji',
  toJSON () {
    return 'JSON.stringify'
  }
}

JSON.stringify(toJSONObj)    // "JSON.stringify"

手写stringify

TODO

你可能感兴趣的:(JSON.stringify)