你不知道的 JSON.stringify

基本语法:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值