| 术语 | 定义 | 与工具的关系 |
|---|---|---|
| Symbol | ECMAScript 2015(ES6)引入的第七种原始数据类型,表示一个全局唯一的标识符。每个通过 Symbol() 创建的实例都保证与其他任何 Symbol 值不相等,即使描述字符串完全相同。Symbol 可以作为对象的属性键使用,且具有不可枚举的特性。 |
本工具的核心主题。所有功能面板均围绕 Symbol 的创建、属性查看、唯一性验证和行为演示展开,是工具存在的根本原因。 |
| 原始数据类型(Primitive) | JavaScript 中不可再分的基本数据类型,包括 undefined、null、boolean、number、string、bigint 和 symbol。原始值按值比较(而非按引用),不能拥有属性和方法(虽然 string、number、boolean 有对应的包装对象)。Symbol 作为原始类型,不能使用 new 关键字创建。 |
工具的属性面板会展示 typeof 返回值,帮助用户确认 Symbol 属于原始类型而非对象类型。教程步骤 1 中特别提示了 new Symbol() 会报错的特性。 |
| description(描述) | 创建 Symbol 时可选传入的字符串参数,仅用于调试和标识目的,不影响 Symbol 的唯一性。描述信息可通过 symbol.description 属性获取(ES2019 标准化)。如果创建时未传入描述,description 属性返回 undefined。描述不影响 Symbol 的 toString() 输出格式——它始终显示为 Symbol(description)。 |
工具在创建 Symbol 时支持输入描述,并在属性面板中展示 description 字段的值。教程中引导用户通过对比同描述和异描述 Symbol 来验证唯一性不受描述影响。 |
| typeof 运算符 | 用于检测变量类型的运算符。对 Symbol 使用时返回字符串 "symbol"(全小写)。这是唯一能可靠区分 Symbol 与其他类型的方式——instanceof Object 对 Symbol 返回 false,但 typeof 是最常用的检测手段。 |
属性面板中高亮显示 typeof 的结果,帮助用户理解 Symbol 的类型检测方法。这是工具中每个创建的 Symbol 都会展示的核心属性之一。 |
| Symbol.for() | 静态方法,接受一个字符串键作为参数。首先在全局符号注册表中查找是否已存在同名 Symbol,若存在则返回该 Symbol,否则创建一个新的全局 Symbol 并注册到表中。这意味着在不同代码位置使用相同键调用 Symbol.for() 会获得同一个 Symbol 引用。全局 Symbol 可跨 iframe、Web Worker 和 realm 共享。 |
工具提供独立的全局注册表面板,用户可以创建、对比和检索全局 Symbol,直观体验 Symbol.for() 与 Symbol() 的行为差异。教程步骤 3 专门引导用户进行此实验。 |
| 全局符号注册表 | 一个跨 realm(如不同 iframe、Web Worker、甚至不同 JavaScript 执行环境)共享的 Symbol 注册机制。通过 Symbol.for() 注册的 Symbol 会被存储在这个全局表中,任何代码都可以通过相同的键访问。该注册表是 JavaScript 引擎在运行时维护的,生命周期与应用程序一致。 |
工具的全局注册表面板模拟了注册表的工作流程,展示了「先查找、再创建」的惰性初始化机制。用户可以在面板中看到注册表中已存在的所有全局 Symbol。 |
| 不可枚举(Non-enumerable) | Symbol 作为对象属性键时,默认具有不可枚举的特性。这意味着 Object.keys()、for...in 循环和 JSON.stringify() 都不会处理 Symbol 键的属性。要访问 Symbol 键,需要使用 Object.getOwnPropertySymbols() 或 Reflect.ownKeys()。这种设计使 Symbol 属性可以作为「隐藏」的元数据存在。 |
工具的对象属性键演示区域专门展示了不同遍历方法对 Symbol 键的处理差异,帮助用户理解 Symbol 属性的枚举限制。教程步骤 4 引导用户逐一测试各种方法。 |
| Well-Known Symbols(著名 Symbol) | JavaScript 语言内置的一组特殊 Symbol 值,用来自定义对象的内置行为。主要包括 Symbol.iterator(同步迭代器协议)、Symbol.asyncIterator(异步迭代器协议)、Symbol.toStringTag(自定义类型标签)、Symbol.hasInstance(自定义 instanceof 行为)、Symbol.toPrimitive(自定义类型转换)、Symbol.species(派生构造函数)等。这些 Symbol 是语言元编程能力的核心载体。 |
工具的著名 Symbol 探索区域提供了对每个内置 Symbol 的交互式演示,用户可以通过编辑对象的 Symbol 方法来观察行为变化。这是工具中最高级的功能模块。 |
| 迭代器协议(Iterator Protocol) | 定义对象如何被 for...of 循环遍历的协议。实现该协议的对象需要定义 [Symbol.iterator] 方法,返回一个具有 next() 方法的迭代器对象。next() 方法每次调用返回 { value, done } 形式的结果。内置的可迭代类型包括 Array、String、Map、Set、NodeList 等。 |
工具通过 Symbol.iterator 的交互式演示,让用户亲手实现自定义对象的迭代行为,并通过 for...of 循环和展开运算符验证结果。 |
| toPrimitive | Symbol.toPrimitive 允许自定义对象在隐式类型转换为原始值时的行为。该方法接收一个 hint 参数,指示期望的转换类型:"number"(数值上下文)、"string"(字符串上下文)或 "default"(默认,通常与 "number" 相同)。返回值即为转换后的原始值。 |
工具展示了如何通过定义 [Symbol.toPrimitive](hint) 方法来控制对象在数学运算或字符串拼接时的转换结果,让用户理解隐式类型转换的底层机制。 |
| JSON.stringify() | 将 JavaScript 值序列化为 JSON 字符串的方法。它会忽略 Symbol 类型的值和以 Symbol 为键的属性,因为 JSON 规范(RFC 8259)不支持 Symbol 类型。对于 Symbol 值直接返回 undefined;对于包含 Symbol 属性的对象,Symbol 键值对会被跳过。 |
工具的序列化演示区域直观展示了 Symbol 在 JSON 处理中的三种被忽略场景,帮助用户避免数据丢失的陷阱。教程步骤 5 详细引导用户进行此实验。 |
| Symbol.species | 一个静态属性,用于指定构造函数在创建派生对象时使用的构造函数。当调用数组的 map()、filter()、slice() 等方法时,它们内部会使用 Symbol.species 来确定返回对象的类型。默认行为是返回当前构造函数的实例。自定义 Symbol.species 可以改变这一行为。 |
工具在著名 Symbol 探索区域中提供了 Symbol.species 的演示,展示如何通过修改该属性来自定义派生对象的构造行为,帮助用户理解继承机制在内置方法中的应用。 |
Symbol 原始值探索 - 创建与使用唯一标识符
Reflect API 使用浏览器 - 对象操作方法速查与测试
列出所有 Reflect 静态方法,提供参数输入并执行,查看返回值和副作用。
ES 私有字段演示 - # 语法与封装
创建带 # 私有字段的类,尝试外部访问观察语法错误,理解封装。
基于模式的模拟数据生成器 - 自定义字段与规则
定义字段名称和类型(姓名、邮箱、数字范围等),批量生成符合规则的 JSON 模拟数据。
JavaScript 反混淆简易器 - 美化与变量重命名
对简单混淆的JS进行格式化,并尝试将短变量名替换为更具描述性的名称,提高可读性。
内置Web组件演示 - 原生自定义元素
展示一些常用内置HTML元素和自定义元素例子,提供代码复制。
CSS自定义属性注册演示 - @property
通过注册CSS属性的类型和初始值,演示如何让渐变等属性实现平滑动画。
Emoji与JS转义互转 - \u{1F600}形式
在Emoji和它的JavaScript Unicode转义序列(如 \u{1F600})之间进行转换。
ES Module 与普通脚本对比演示 - 作用域与加载
对比 ES Module 和经典脚本的变量作用域、严格模式以及执行时机。
Snowflake ID 在线解析器 - Twitter 风格 ID 解构
输入一个 Snowflake 格式的数字 ID,解析出生成时间戳、数据中心、机器编号和序列号。
Emmet 缩写语法浏览器 - 编写并预览展开
输入 Emmet 缩写,实时显示展开后的 HTML 结构,学习高级 Emmet 技巧。
Popover API 实例展示 - 无JS的弹出层构建
使用原生HTML Popover属性创建提示、菜单与对话框,展示四种触发方式及样式定制。
浏览器标签页预览模拟 - 切换主题
设置浏览器标题和图标,模拟在暗色/亮色主题下标签栏的样子。
浏览器扩展样板代码生成器 - 定制 manifest 与脚本
选择扩展类型(弹出、内容脚本、后台),生成完整的项目文件和 manifest.json。
Web Components 生命周期浏览器 - 查看回调执行
创建一个测试自定义元素,记录并展示 connectedCallback, attributeChangedCallback 等执行顺序。
纯CSS模态弹窗生成 - 无JS弹出层
利用 `:target` 伪类创建无需JavaScript的弹窗组件,支持关闭按钮和遮罩层。
CSS 运动路径构建器 - offset-path 动画设计
绘制 SVG 路径,将动画元素绑定到路径上,生成 offset-path 动画代码。
流体排版 CSS 生成器 - clamp() 函数计算
输入最小/最大字体大小和视口范围,生成精确的 clamp() 值及回退方案。
图标字体实时预览 - 输入码点测试大小
粘贴自定义图标字体的Unicode,调节尺寸颜色立即查看效果。
表单验证规则测试 - Constraint API
设置不同验证属性和自定义消息,测试HTML5表单验证触发效果。
JavaScript 代码混淆器 - 轻量级混淆与反混淆
对 JS 代码进行变量名缩短、字符串加密等简单混淆,并尝试反混淆格式化。
表单验证演练场 - HTML5 Constraint API 演示
展示各种 HTML5 验证属性(required, pattern, min, max 等)和自定义验证消息的效果。
HTML转React JSX - 属性转换
将HTML代码转换为兼容React JSX的代码(class→className,style→对象等)。
ESLint 规则快速查找器 - 按描述匹配规则名称
输入问题描述(如“禁止未使用变量”),自动匹配对应的 ESLint 规则名称及配置建议。
分页组件生成器 - 自定义样式与按钮
设置总页数与当前页,生成数字式或省略式分页导航条。
Server-Sent Events 代码片断生成 - 客户端与服务端模板
配置事件类型和重试间隔,生成用于接收 SSE 的前端 EventSource 代码和后端流示例。
WebCodecs API 图像解码器 - 解码 JPEG/PNG 帧
使用 ImageDecoder API 解码图片并逐帧显示(若为动图),展示底层编解码能力。
数组操作方法性能对比 - map/filter/reduce/for 循环
在同一数据上运行多种数组遍历方式,测量并比较它们的执行时间,辅助性能优化决策。
渐变色标数据表 - CSV数据生成渐变CSS
使用CSV格式定义多个色标的位置和颜色,批量生成复杂的CSS渐变代码。
Import Map 演示 - 浏览器端模块映射实验
编写 HTML 和 import map,在浏览器中直接导入裸标识符模块并执行。
代码竞速计分板 - 字符数统计
输入代码并自动去除无意义空格,统计有效字符数,用于Code Golf比赛。
UD5工具箱