- 深拷贝 (Deep Clone)
- 深拷贝是指递归地复制对象的所有层级,创建一个与原始对象完全独立的新对象。新对象与原始对象之间不存在任何共享的引用关系,对新对象的任何修改都不会影响原始对象,反之亦然。深拷贝是确保数据隔离和状态管理正确性的重要手段。
- 浅拷贝 (Shallow Copy)
- 浅拷贝只复制对象的第一层属性。如果属性值是原始类型(如数字、字符串、布尔值),则拷贝的是值本身;如果属性值是引用类型(如对象、数组),则拷贝的是引用地址。这意味着修改嵌套属性会影响原始对象。常见的浅拷贝方式包括 Object.assign() 和展开运算符。
- 结构化克隆算法 (Structured Clone Algorithm)
- 结构化克隆算法是浏览器内置的一种深拷贝算法,最初用于 Web Workers 之间的消息传递。该算法支持大多数 JavaScript 数据类型,包括对象、数组、Map、Set、Date、RegExp、ArrayBuffer、Blob、File、ImageData 等。它能够正确处理循环引用,遇到不支持的类型时会抛出 DataCloneError 异常。
- 循环引用 (Circular Reference)
- 循环引用是指对象的属性直接或间接引用了自身。例如对象 A 的属性指向对象 B,而对象 B 的属性又指向对象 A。在深拷贝过程中,如果算法无法检测和处理循环引用,就会导致无限递归并最终栈溢出。structuredClone 能够通过内部的引用表机制正确处理循环引用。
- structuredClone()
- structuredClone() 是全局可用的函数,接收一个值作为参数并返回该值的深拷贝。它是 ES2022 正式引入的标准 API。该函数内部使用结构化克隆算法,能够处理大多数 JavaScript 数据类型和复杂的对象结构。如果传入不支持的类型,会抛出 DOMException。
- JSON.parse(JSON.stringify())
- 这是一种经典的深拷贝技巧,通过将对象序列化为 JSON 字符串然后再解析回来实现深拷贝。这种方式的优点是兼容性极好,缺点是会丢失 undefined、Function、Symbol、Date(转为字符串)、RegExp(转为空对象)等类型的信息,且无法处理循环引用。
- 展开运算符 (Spread Operator)
- 展开运算符 ... 是 ES6 引入的语法,用于将可迭代对象展开。用于对象时如 {...obj},它会创建一个新对象并将原对象的所有顶层属性复制过去。但这是浅拷贝操作,嵌套的引用类型属性只是复制了引用,而非递归复制值。适用于简单的属性合并场景。
- DataCloneError
- DataCloneError 是当 structuredClone 尝试克隆不支持的数据类型时抛出的异常。例如尝试克隆 Function、DOM 节点、Error 对象等就会触发此错误。该异常包含了详细的错误信息,帮助开发者定位问题所在。
- 序列化 (Serialization)
- 序列化是指将内存中的对象转换为可以存储或传输的格式(如 JSON 字符串)的过程。反序列化则是将序列化后的格式还原为对象。JSON 方式的深拷贝本质上就是一次序列化加一次反序列化。序列化的局限在于无法保留原始对象的类型信息和方法。
- 引用类型 (Reference Type)
- 在 JavaScript 中,对象、数组、函数、Map、Set 等都是引用类型。变量存储的不是这些值本身,而是指向内存中实际数据的地址。这就是浅拷贝无法实现真正独立复制的根本原因,也是理解深拷贝必要性的关键概念。
JSON Schema生成器 - 从JSON数据推断结构
粘贴JSON示例数据,自动分析并生成对应的JSON Schema,支持类型推断和必填标记。
代码语言检测工具 - 根据语法特征推断编程语言
粘贴代码片段,基于关键字和语法模式自动推断编程语言,适合未命名文件的快速识别。
代码行数统计工具 - 忽略注释空行
粘贴代码,计算总行数、有效代码行数、注释行数和空行数。
XML结构校验器 - 嵌套闭合与属性检查
检查XML的格式正确性,报告错误的标签闭合和属性缺失。
XSS 过滤器测试沙盒 - 输入转义与过滤演示
输入可能的攻击向量,选择不同的转义或过滤策略,实时查看是否被安全处理,教育安全开发。
Webhook载荷美化器 - JSON/XML自动缩进
粘贴原始Webhook请求体,自动识别并格式化,便于阅读调试。
颜色变量命名工具 - 语义化名称建议
输入颜色十六进制值,根据色相和明度给出类似`--color-primary-500`的命名建议。
高级文本差异对比 - 逐词高亮与智能合并
并排显示两段文本差异,字符级高亮且支持三路合并视图,解决冲突更直观。
Datalist 自动建议增强演示 - 动态数据源
演示如何动态更新 datalist 选项以实现搜索建议,并处理键盘选择。
SQLite WebAssembly 浏览器端演示 - 离线数据库
在浏览器中运行完整的SQLite数据库,创建表、插入查询数据,体验客户端强大的SQL能力。
z-index层级可视化 - 拖拽相互遮挡关系
添加多个色块拖拽顺序,直观表现层叠上下文与z-index值。
WebSocket 消息检查器 - 拦截并可视化收发数据
代理 WebSocket 连接,实时拦截并展示所有文本/二进制消息,支持过滤和搜索。
WebSocket 消息构建器 - 编辑并发送文本/二进制帧
连接到 WebSocket 端点,自定义消息内容(JSON、文本、ArrayBuffer)并发送,查看响应。
增强版字数统计器 - 中英日韩混合精确计数
支持多语言字符分割,准确统计汉字、英文单词、日文假名数量,并评估社交媒体发文长度。
CSS 容器查询演示 - @container 根据父元素响应
设置容器宽度阈值,改变容器大小观察组件内部样式的变化,学习容器查询用法。
SVG转React组件 - 自动生成JSX代码
粘贴SVG代码,自动转换为React函数组件格式,处理属性名驼峰化。
Web 字体优化建议器 - 分析字体加载对性能的影响
输入网页 URL,检测所用 Web 字体,评估加载策略并给出优化建议。
颜色名称查找工具 - HEX与命名颜色互转
输入颜色值查找对应的CSS颜色名称,或浏览所有命名颜色及其色值,提升设计效率。
SVG转JSX组件生成器 - 自动化React SVG
粘贴SVG代码,将其转换为可复用的React组件,注意驼峰属性名和自闭合标签。
robots.txt 测试模拟器 - 验证爬虫规则
输入网站robots.txt内容与用户代理,测试指定URL是否被允许抓取,SEO优化辅助。
修辞手法Bingo - 阅读时勾选发现的修辞格
随机生成含比喻、拟人等修辞格的Bingo卡,在阅读文章时标记。
仿生阅读文本生成器 - 单词前半加粗提升速读
将英文文本转换为单词前几个字母加粗的格式,引导视线跳跃式阅读,模拟Bionic Reading效果。
基础风格迁移演示 - 载入预训练小型模型
利用预训练的轻量变换网络在浏览器中简单演示将图片转换成特定风格。
Webmention发送测试 - 手动Ping引用
输入源页和引用页URL,构造Webmention请求通知被引用页面,演示独立博客协议。
组件预览沙盒 - 隔离测试 React/Vue 组件
在一个隔离环境中渲染单个组件,调整 props 查看变化,类似于 Storybook 的轻量替代。
A/B 测试显著性计算器 - Z 检验与 P 值
输入对照组和实验组的用户数与转化数,计算 Z 值、P 值,判断是否具有统计显著性。
知识面板预览工具 - 模拟 Google 商家信息
填写企业信息,模拟在 Google 搜索右侧可能出现的知识面板卡片。
点击劫持测试页面 - 检测 X-Frame-Options 缺失
尝试将目标 URL 加载到 iframe 中,检测是否缺少点击劫持防护头,并展示风险。
S-Record/HEX转二进制 - 固件文件查看器
解析Motorola S-Record或Intel HEX格式的固件文件,提取显示原始数据块。
采样定理演示 - 欠采样与混叠现象
调节采样频率,观察对正弦波的离散采样和重建效果,演示欠采样导致的频率混叠。
UD5工具箱