FE Interview Hub
JavaScript 中階

為什麼推薦用 structuredClone 在 JavaScript 做深拷貝?

AI 練習作答

什麼是 structuredClone?

structuredClone() 是瀏覽器和 Node.js(v17+)內建的深拷貝 API,使用 Structured Clone Algorithm 實作。

const original = { a: 1, b: { c: [1, 2, 3] }, d: new Date() };
const clone = structuredClone(original);

clone.b.c.push(4);
console.log(original.b.c); // [1, 2, 3](不受影響)

為什麼推薦 structuredClone?

與 JSON.parse(JSON.stringify()) 相比

特性 JSON 方法 structuredClone
Date 轉成字串(破壞) ✅ 正確複製
undefined 遺失 ✅ 保留
Map / Set 轉成 {} / [] ✅ 正確複製
RegExp 轉成 {} ✅ 正確複製
ArrayBuffer 無法處理 ✅ 正確複製
循環引用 拋出錯誤 ✅ 正確處理
function 遺失 ❌ 無法複製
Symbol 遺失 ❌ 無法複製

範例:Date 處理

const obj = { date: new Date() };

// JSON 方法(有問題)
const bad = JSON.parse(JSON.stringify(obj));
console.log(bad.date instanceof Date); // false(變成字串)

// structuredClone(正確)
const good = structuredClone(obj);
console.log(good.date instanceof Date); // true

範例:循環引用

const a = { name: 'circular' };
a.self = a; // 循環引用

// JSON 方法
JSON.parse(JSON.stringify(a)); // TypeError: Converting circular structure to JSON

// structuredClone
const clone = structuredClone(a); // 正確處理!

限制

  • 無法複製函式(function)
  • 無法複製 Symbol
  • 無法複製 DOM 節點
  • 無法複製 class 實例的方法(只複製 own properties)

瀏覽器支援

現代瀏覽器(Chrome 98+、Firefox 94+、Node.js 17+)均已支援。舊版環境需使用 lodash.cloneDeep 等替代方案。

✦ AI 模擬面試

輸入你的答案,AI 即時分析精準度與改進空間

登入後即可使用 AI 評分