今天在去了解 JSON.parse() 中 reviver参数时发现了中有一个例子很有意思。
例子如下:
JSON.parse('{"p": 5}', (key, value) =>
typeof value === 'number'
? value * 2 // 为数字时返回值*2
: value // 其他不变
);
// { p: 10 }
JSON.parse('{"1": 1, "2": 2, "3": {"4": 4, "5": {"6": 6}}}', (key, value) => {
console.log(key); // 记录当前属性名,最后一个为""
return value; // 返回未改变的属性值
});
// 1
// 2
// 4
// 6
// 5
// 3
// ""
看看 MDN 对 reviver 参数的定义:
如果 reviver 指定了a ,则解析计算的值会 在返回之前进行转换。具体来说,计算出的值及其所有属性(从嵌套最多的属性开始并继续到原始值本身)分别通过