Skip to content

手写 JSON.stringify 函数

Published: at 06:42 PMSuggest Changes

前面一阵,想看一下 JSON.stringify 方法得递归逻辑,被人说成这么简单的一个函数随便几分钟手写一个,然后扯到深拷贝,又扯到容易被循环引用

我简单看了一下这个函数的源码,1000 多行,很大一部分我看不懂,但是也找到它不套娃的原因了。

简介

JSON.stringify() 方法将一个 JavaScript 对象或值转换为 JSON 字符串,如果指定了一个 replacer 函数,则可以选择性地替换值,或者指定的 replacer 是数组,则可选择性地仅包含数组指定的属性。

用例

let data = [
  {
    id: 1,
    children: [
      { id: 2, children: [{ id: 3, children: [{ id: 4 }, { id: 5 }] }] },
    ],
  },
];
let str = JSON.stringify(
  data,
  (k, v) => {
    console.log('k,v', k, v && JSON.stringify(v));
    if (
      Object.prototype.toString.call(v) === '[object Object]' &&
      'children' in v
    ) {
      const c = v.children;
      v.group = c;
    }
    return v;
  },
  2
);
console.log(str);
console.log(data);

特点分析

就上面这个用例,先看看输出一个用 2 个空格作为缩进的字符串 JSON,还要加入回车换行,这个稍微努力一下还是可以写出来的


Previous Post
非阻塞加载 CSS:避免 CDN 故障导致页面加载延迟
Next Post
JavaScript Number.MAX_SAFE_INTEGER 最大安全整数详解