栏目分类
MPLX中文网
学习JSON.stringify的9大特性和转换规则
发布日期:2025-01-04 11:42 点击次数:112
一、JSON.stringify介绍
JSON.stringify() 方法将一个 JavaScript 对象或值转换为 JSON 字符串,如果指定了一个 replacer 函数,则可以选择性地替换值,或者指定的 replacer 是数组,则可选择性地仅包含数组指定的属性。
语法:
JSON.stringify(value[, replacer [, space]])
参数:
value 将要序列化成 一个 JSON 字符串的值。
replacer 可选
如果该参数是一个函数,则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理;如果该参数是一个数组,则只有包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中;如果该参数为 null 或者未提供,则对象所有的属性都会被序列化。
space 可选
指定缩进用的空白字符串,用于美化输出(pretty-print);如果参数是个数字,它代表有多少的空格;上限为10。该值若小于1,则意味着没有空格;如果该参数为字符串(当字符串长度超过10个字母,取其前10个字母),该字符串将被作为空格;如果该参数没有提供(或者为 null),将没有空格。
返回值:
一个表示给定值的JSON字符串。
异常:
当在循环引用时会抛出异常TypeError ("cyclic object value")(循环对象值)当尝试去转换 BigInt 类型的值会抛出TypeError ("BigInt value can't be serialized in JSON")(BigInt值不能JSON序列化).
基本使用:
注意:
JSON.stringify可以转换对象或者值(平常用的更多的是转换对象)可以指定replacer为函数选择性的地替换也可以指定replacer为数组,可转换指定的属性
这里仅仅是MDN上关于JSON.stringify其中最基础的说明,咱们先打个码试试这几个特性
1. 转换对象
2. 转换普通值
3. 指定replacer函数
4. 指定数组
5. 指定space(美化输出)
二、9大特性要记住
以前仅仅是使用了这个方法,却没有详细了解他的转换规则,居然有9个之多。
特性一
特性二
布尔值、数字、字符串的包装对象在序列化过程中会自动转换成对应的原始值。
特性三
所有以symbol为属性键的属性都会被完全忽略掉,即便 replacer 参数中强制指定包含了它们。
特性四
NaN 和 Infinity 格式的数值及 null 都会被当做 null。
特性五
转换值如果有toJSON() 方法,该方法定义什么值将被序列化。
特性六
Date 日期调用了 toJSON() 将其转换为了 string 字符串(同Date.toISOString()),因此会被当做字符串处理。
特性七
对包含循环引用的对象(对象之间相互引用,形成无限循环)执行此方法,会抛出错误。
特性八
其他类型的对象,包括Map/Set/WeakMap/WeakSet,仅会序列化可枚举的属性
特性九
当尝试去转换 BigInt 类型的值会抛出错误
三、手写一个JSON.stringify
终于重新学完JSON.stringify的众多特性啦!咱们根据这些特性来手写一个简单版本的吧(无replacer函数和space)
源码实现:
测试一把:
通过上面测试可以看出,jsonstringify基本和JSON.stringify表现一致,
到此这篇关于学习JSON.stringify的9大特性和转换规则的文章就介绍到这了,更多相关JSON.stringify内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!