オブジェクトのディープコピーを作る
// ── 基本: オブジェクトの「完全なコピー(深いコピー)」を作る
const original = {
name: '田中',
scores: [85, 92, 78],
address: { city: '東京', zip: '100-0001' },
};
// ❌ スプレッド構文は「浅いコピー」= ネストは参照共有
const shallow = { ...original };
shallow.address.city = '大阪'; // original.address.city も変わる!
console.log(original.address.city); // '大阪' ← 意図しない変更
// ✅ structuredClone は「深いコピー」= 完全に独立したコピー
const deep = structuredClone(original);
deep.address.city = '名古屋'; // こちらだけ変わる
console.log(original.address.city); // '東京' ← 変わらない ✅
// ── Date, Set, Map にも対応(JSON.parse/stringify より優れている)
const data = {
date: new Date('2024-01-01'), // Date は JSON で文字列になるが
set: new Set([1, 2, 3]), // Set は JSON に変換できない
};
const copy = structuredClone(data);
console.log(copy.date instanceof Date); // true ← Date のまま保持
console.log(copy.set instanceof Set); // true ← Set のまま保持JSON.parse(JSON.stringify(obj))より高速で型を保持する。関数・DOM要素・クラスインスタンスのメソッドはクローンできない。