前言
用了那么多JSON.stringfiy这个方法,一直把这个方法当成一个参数的方法。今天翻了下javascript 权威指南,才发现这个方法还有两个参数,顺便查阅了一下MDN Web Docs, 发现这个方法有点东西,特此记录下
概念
先来看下
**JSON.stringify() ** 方法将一个 JavaScript 对象或值转换为 JSON 字符串,如果指定了一个 replacer 函数,则可以选择性地替换值,或者指定的 replacer 是数组,则可选择性地仅包含数组指定的属性。
平常用的基本大部分绝多数都只用到了前半句话,将对象或者值转换为json字符串
语法
JSON.stringify(value[, replacer [, space]])
说实在的 这种语法的写法,我怎么看怎么看不太明白,网上搜索也没找到依据,
参数
JSON.stringify 方法有三个参数 前面这个value就不详细记录了,重点后面两个参数
replacer
看参数名称 大概是 替换或者代替的意思
分三种情况
- replacer 是数组类型时
- 参数是一个数组,则只有包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中
-
replacer 是函数时
-
参数为 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方法的参数认识已结束