重新认识JSON.stringfiy

前言

用了那么多JSON.stringfiy这个方法,一直把这个方法当成一个参数的方法。今天翻了下javascript 权威指南,才发现这个方法还有两个参数,顺便查阅了一下MDN Web Docs, 发现这个方法有点东西,特此记录下

概念

先来看下

**JSON.stringify() ** 方法将一个 JavaScript 对象或值转换为 JSON 字符串,如果指定了一个 replacer 函数,则可以选择性地替换值,或者指定的 replacer 是数组,则可选择性地仅包含数组指定的属性。

平常用的基本大部分绝多数都只用到了前半句话,将对象或者值转换为json字符串

语法

JSON.stringify(value[, replacer [, space]])

说实在的 这种语法的写法,我怎么看怎么看不太明白,网上搜索也没找到依据,

参数

JSON.stringify 方法有三个参数 前面这个value就不详细记录了,重点后面两个参数

replacer

看参数名称 大概是 替换或者代替的意思

分三种情况

  1. replacer 是数组类型时
  • 参数是一个数组,则只有包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中
  1. replacer 是函数时

    • 值的每个属性都会经过该函数的转换和处理

      函数的情况说明

      1. 该函数有两个参数,key和value
      2. 该函数可视为一个递归,
        • 一开始时候,key为空串,value为JSON.stringify的 value即第一个参数,并返回该value
        • 如果返回一个任何其他对象(除了函数外,将不返回),该对象递归地序列化成 JSON 字符串,
        • 如果返回一个 Number, 转换成相应的字符串作为属性值被添加入 JSON 字符串。
        • 如果返回一个 String, 该字符串作为属性值被添加入 JSON 字符串。
        • 如果返回一个 Boolean, “true” 或者 “false” 作为属性值被添加入 JSON 字符串。
  2. 参数为 null 或者未提供

    • 则对象所有的属性都会被序列化

总结: replacer 参数可用来过滤或者重新组织转换需要转换对象的字符串

space

看参数名称 大概是 空格 格式的意思

参数用来控制结果字符串里面的间距。如果是一个数字, 则在字符串化时每一级别会比上一级别缩进多这个数字值的空格(最多10个空格);如果是一个字符串,则每一级别会比上一级别多缩进该字符串(或该字符串的前10个字符)

这里就直接运行例子更直观,space 可以是空格,制表符,或者其他符号

JSON.stringify({ a: 2 }, null, " ");   // '{\n "a": 2\n}'
JSON.stringify({ a: 2 }, null, "|| "); 
// "{
// || "a": 2
// }"
JSON.stringify({ uno: 1, dos : 2 }, null, '\t')
// '{            \
//     "uno": 1, \
//     "dos": 2  \
// }'

toJSON 方法

说到 JSON.stringify 就不得不需要了解 toJSON的这个方法

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

也就是说value 这个值 具有toJSON方法时,序列化的则是to JSON返回的值

最后

对 JSON.stringify方法的参数认识已结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值