结构化克隆与 URLSearchParams
使用 structuredClone 深拷贝数据(保留 Dates/Maps/Sets),并使用 URLSearchParams 解析和构建查询字符串
结构化克隆与 URLSearchParams 是 CoddyKit 上的免费 JavaScript Academy 课时。 这是第 2 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 JavaScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 JavaScript Academy 课程共包含 3 节课。
为什么使用这些工具
目标:安全地复制和序列化 URL 数据。
- structuredClone会深度复制数据
- 保留日期/映射/集合
- URLSearchParams解析和构建查询字符串
- 适合初学者的模式

保留类型的深度复制
structuredClone会创建深度副本,并完整保留日期对象。
// Deep copy with structuredClone (Node 17+/modern browsers)
const original = { n: 1, list: [1, 2], when: new Date("2024-01-01") };
const copy = structuredClone(original);
copy.n = 2;
copy.list.push(3);
console.log("original.n:", original.n);
console.log("copy.n:", copy.n);
console.log("dates equal type?", copy.when instanceof Date);

JSON 会丢失类型
JSON 只包含数据;日期/映射/集合会变成普通值,或者直接丢失。
// JSON round-trip loses special types (e.g., Date becomes string)
const obj = { when: new Date("2024-01-01"), ok: true };
const round = JSON.parse(JSON.stringify(obj));
console.log("after JSON:", typeof round.when, round.when);
console.log("is Date?", round.when instanceof Date);

映射与集合可以保留
使用 structuredClone 克隆时,映射和集合都能正确保留。
// structuredClone preserves Map and Set
const m1 = new Map([["a", 1]]);
const s1 = new Set([1, 2]);
const cloned = structuredClone({ m1, s1 });
console.log("map has a?", cloned.m1.has("a"));
console.log("set has 2?", cloned.s1.has(2));

解析查询字符串
URLSearchParams读取查询字符串;需要时可以使用get、getAll、has并进行迭代。
// Parse a query string with URLSearchParams
const qs = "q=shoes&color=red&color=blue&page=2";
const params = new URLSearchParams(qs);
console.log("q:", params.get("q"));
console.log("first color:", params.get("color"));
console.log("all colors:", params.getAll("color"));
console.log("page:", params.get("page"));

构建查询字符串
使用set/append,然后调用toString()创建安全的查询字符串。
// Build a query string from key/value pairs
const build = new URLSearchParams();
build.set("q", "shoes");
build.append("color", "red");
build.append("color", "blue");
build.set("page", String(2));
console.log("query:", build.toString());
// Example full URL
const url = "https://example.com/search?" + build.toString();
console.log("url:", url);

structuredClone 与 JSON 测验
快速检查:保留类型的深度复制。

回顾
回顾:使用structuredClone进行保留日期/映射/集合等类型的深度复制。使用URLSearchParams安全地解析和构建查询字符串。

常见问题解答
「结构化克隆与 URLSearchParams」课时是免费的吗?
是的 — 「结构化克隆与 URLSearchParams」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 JavaScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 JavaScript Academy 课程共包含 3 节课。
「结构化克隆与 URLSearchParams」这节课中我会学到什么?
使用 structuredClone 深拷贝数据(保留 Dates/Maps/Sets),并使用 URLSearchParams 解析和构建查询字符串 你通过在浏览器中直接运行的动手代码来练习 JavaScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 JavaScript Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 JavaScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 3 节。
「结构化克隆与 URLSearchParams」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 JavaScript Academy 课中编写并运行代码吗?
能。每节 JavaScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- JSON.parse / JSON.stringify 基础
- 结构化克隆与 URLSearchParams
- 安全解析 JSON 的策略