你可能经常看到 JSON.stringify()
和 JSON.parse()
一起配合使用嘚场景就像下面的代码一样,这种模式是实现的方式之一:
JSON.stringify()
在转化对象存在循环引用时会抛出。更简单地说就是如果一个对象有一個属性指向它本身,JSON.stringify()
会抛出错误比如:
语句中因为循环引用在实践中十分常见。
JSON.stringify()
的第一个参数是被序列化为 JSON
的对象JSON.stringify()
实际上可以接受 3 个参数,同时第三个参数被称作 spaces
spaces
参数被用于采用一种可以提高可读性的方式来格式化
spaces
字符串不一定非要是空格虽然通常我们会使用空格,比如它也可以是下划线:
JSON.stringify()
的第二个参数是 replacer
函数在上文的例子中,它等于 null
JavaScript 会对对象中的每一个键值对调用 replacer
函数,然后会使用其返回值作为格式化后的值,比如:
replacer
函数在省略敏感数据时十分有用。假设你想要省略所有包含 password
的属性:
JSON.stringify()
方法在遍历对象的同时,吔会关注那些拥有 toJSON()
方法的属性如果它发现 toJSON()
方法,JSON.stringify()
会调用它然后将它的返回值替换格式化后的值,比如:
很多 JavaScript 模块使用 toJSON()
来确保序列化复雜对象的正确性比如 和 。
JSON.stringify()
是 JavaScript 中较核心的基础方法许多库和框架在其内部都使用它,因此深入的理解它,可以帮助你更好地使用你喜歡的 npm
模块比如,你可以在 Express REST API 中利用 toJSON
方法来格式化原生 Date
类型或者在 Axios 中,能够正确地通过 HTTP 请求发送包含循环引用的对象