前面一阵,想看一下 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,还要加入回车换行,这个稍微努力一下还是可以写出来的
上一篇
非阻塞加载 CSS:避免 CDN 故障导致页面加载延迟
页面加载 CSS 文件时,如果 CDN 链接失效,会导致页面加载缓慢。本文介绍一种非阻塞加载 CSS 的方法,有效避免 CDN 故障导致的页面加载延迟,通过使用 `media='none'`属性和`onload` 事件,在 CSS 文件加载完成后再将其应用于页面。
下一篇
JavaScript Number.MAX_SAFE_INTEGER 最大安全整数详解
深入探讨 JavaScript 中 Number.MAX_SAFE_INTEGER 的含义,解释其背后的原因,并提供相关学习资源链接。文章涵盖了 JavaScript 数值精度问题、二进制与十进制转换等知识点。