基本语法:
JSON.stringify (对象, 处理函数/ 数组, 数字)
第一个参数:
表示序列化的对象或者数据
第二个参数:
1.处理函数:
在序列化的过程中,被序列化的每个属性都会经过该函数的转换和处理 --- 筛选
举例:
2. 数组:
只有包含在这个数组中的属性名才会被序列化
可以明显的看到:在序列化的时候只是将其中的属性值是one进行序列化
第三个参数:
用来指定缩进的时候用的空白字符串 ,更多的时候是一个数字表示几个空格:
备注: 明显可以将字符串转化成可其中的对象的形式,并且其中的缩进显示在键值前面
应用场景:
- 判断对象/数组是否相等
- localStorage/ sessionStroage 存储对象 【localStorage/sessionStroage 只能 存字符串】
- 实现对象深拷贝
- 路由传参 (路由传参只能用字符串来进行)
注意事项:
1. 代码中包含toJSON 的属性的时候 慎用
2. 被转化的对象中含有undefined, 任意函数, symbol 的时候 慎用
第一种是: 对象数组
进行嵌套的时候其中返回的也是null
怎么避免这种情况的发生呢:利用JSON.stringify里面的第二个参数来进行: 主要的思路: 判断其中的value 的类型 如果是undefined, 任意函数, symbol 进行原样返回就好 【需要注意的就是 如果是函数的话需要调用toString 进行返回就好】
第二种: 包含循环变量的对象 慎用
理解: 这里成了一个死循环, 没有办法进行序列化
第三种:以 symbol 为属性键的属性,慎用
所有以 symbol 为属性键的属性都会被完全忽略掉,即便 replacer 参数中强制指定包含了它们。
第四种: 值为 NaN 和 Infinity,慎用
第五种:不可枚举的属性值的时候
其中还有几个比较特殊的特点:
- 非数组对象的属性不能保证以特定的顺序出现在序列化后的字符串中 --- 其中的对象属性值是undefined, 还有 symbol 的时候 就不进行返回了
- JSON.stringify() 将会正常序列化 Date 的值
- 布尔值、数字、字符串的包装对象在序列化过程中会自动转换成对应的原始值
本文章是将别人的博客,文章进行整理所得
参考资料:
https://juejin.cn/post/6844904016212672519#heading-0 -- 你不知道的 JSON.stringify() 的威力
https://mp.weixin.qq.com/s/rK0SGLVFpLmQfUdKTLFnbw -- 慎用JSON.stringify