所有 javascript 内所有 JSON-safe 的值都可以被 JSON.stringify。
1 | JSON.stringify(42); |
JSON-safe 的值
什么是 JSON-safe 的值呢?我的理解是不方便跨语言的值都不是 JSON-safe 的。例如 undefined function symbol 还有循环引用的 object。
1 | // 非JSON-safe的值会被略掉 |
toJSON 方法
当对一个对象直接 stringify 的结果不是我们想要的,或者那个对象含循环引用时,我们可以在该对象上定义一个toJSON方法来自定义它需要返回的结果。返回的结果得是 JSON-safe 的。
1 | var o = {}; |
stringify 的第二个参数 replacer
1 | var a = { |
如上所示,如果在第二个参数传入了一个字符串数组,那么 stringify 的过程中就会只保留对应的键值对。
如果在第二个参数传入一个函数,那么可以自定义需要保留的键值对。
stringify 的第三个参数 space
1 | var a = { |
如上所示,第三个参数可以是数字,表示缩进的空格个数;也可以是字符串,表示占位的符号。