Baseline Widely available
ì ì structuredClone()
ë©ìëë structured clone ìê³ ë¦¬ì¦ì ì¬ì©íì¬ ì£¼ì´ì§ ê°ì ê¹ì ë³µì¬ë¥¼ ìì±í©ëë¤.
ëí, ì´ ë©ìëë ì ê°ì²´ë¡ ë³µì¬íë ëì ìë ê°ìì ì ì¡ê°ë¥í ê°ì²´ë¥¼ ì ì¡ë ì ìëë¡ í©ëë¤. ì ì¡ë ê°ì²´ë ìë ê°ì²´ë¡ë¶í° ë¶ë¦¬ëê³ ì ê°ì²´ë¡ ì°ê²°ë©ëë¤. ë ì´ì ìë ê°ì²´ì ì ê·¼í ì ìê² ë©ëë¤.
구문structuredClone(value)
structuredClone(value, options)
매ê°ë³ì
value
ë³µì ë ê°ì²´. ì´ê²ì 모ë 구조íë ë³µì ê°ë¥í íì ì¼ ì ììµëë¤.
options
Optional
ë¤ì ìì±ë¤ì ê°ì§ ê°ì²´.
transfer
ë°íë ê°ì²´ë¡ ë³µì ëë ëì ì´ëë ì ì¡ê°ë¥í ê°ì²´ì ë°°ì´
ë°í ê°ì ìë value
ì ê¹ì ë³µì¬ì
ëë¤.
DataCloneError
DOMException
ì ë ¥ ê°ì ì¼ë¶ë¼ë ì§ë ¬íë ì ìë ê²½ì° ìì¸ë¥¼ ëì§ëë¤.
ì´ í¨ìë JavaScript ê°ì ê¹ì ë³µì¬íëë° ì¬ì©ë ì ììµëë¤. ëí, ìëì ê°ì´ ìí 참조ë ì§ìí©ëë¤.
// ê°ê³¼ ì¤ì¤ë¡ë¥¼ ìí 참조íë ê°ì²´ ìì±
const original = { name: "MDN" };
original.itself = original;
// ë³µì
const clone = structuredClone(original);
console.assert(clone !== original); // ëì¼íì§ ìì ê°ì²´ (ê°ì§ ìì ëì¼ì±)
console.assert(clone.name === "MDN"); // ê°ì ê°ì ê°ì§ëë¤.
console.assert(clone.itself === clone); // ìí ì°¸ì¡°ê° ë³´ì¡´ë©ëë¤.
ê° ì ì¡
options
매ê°ë³ìì transfer
ìì±ì ì¬ì©íì¬ ë³µì ë ê°ì²´ìì ë³µì ëë ëì ì ì¡ê°ë¥í ê°ì²´ê° ì ì¡ë ì ììµëë¤. ì ì¡íë©´ ìë ê°ì²´ë¥¼ ì¬ì©í ì ìê² ë©ëë¤.
ì°¸ê³ ì¬í ë²í¼ì ì¼ë¶ ë°ì´í°ë¥¼ ì ì¥í기 ì ì ë¹ë기ì ì¼ë¡ ê²ì¬í ë ì ì©í ì ììµëë¤. ë°ì´í°ê° ì ì¥ë기 ì ì ë²í¼ê° ìì ëë ê²ì í¼í기 ìí´ ë²í¼ë¥¼ ë³µì íê³ í´ë¹ ë°ì´í°ë¥¼ ê²ì¬í ì ììµëë¤. ë°ì´í°ë¥¼ ì ì¡íë©´, ìë ë²í¼ë¥¼ ìì íë ¤ë ìëë¤ì ì¤í¨íì¬ ì¤ìë¡ ì못 ì¬ì©íë ê²ì ë°©ì§í©ëë¤.
ë¤ì ì½ëë ë°°ì´ì ë³µì íê³ í´ë¹ 기본 ììì ì ê°ì²´ë¡ ì ì¡íë ë°©ë²ì ë³´ì¬ì¤ëë¤. ë°í ì ìëì uInt8Array.buffer
ì ì§ìì§ëë¤.
// 16MB = 1024 * 1024 * 16
const uInt8Array = Uint8Array.from({ length: 1024 * 1024 * 16 }, (v, i) => i);
const transferred = structuredClone(uInt8Array, {
transfer: [uInt8Array.buffer],
});
console.log(uInt8Array.byteLength); // 0
ê°ì²´ ìì ìê´ìì´ ë³µì íê³ í´ë¹ ê°ì²´ì íì ì§í©ì ì ì¡í ì ììµëë¤. ì를 ë¤ì´, ìë ì½ëë ì ë¬ë ê°ìì arrayBuffer1
ì ì ì¡íì§ë§, arrayBuffer2
ë ì ì¡íì§ ììµëë¤.
const transferred = structuredClone(
{ x: { y: { z: arrayBuffer1, w: arrayBuffer2 } } },
{ transfer: [arrayBuffer1] },
);
ìì ê°ì²´ ë³µì
ì´ë² ìì ìì, ë°°ì´ì 멤ë²ë¡ ê°ì§ ê°ì²´ë¥¼ ë³µì í©ëë¤. ë³µì í, ê° ê°ì²´ì ëí ë³ê²½ì ë¤ë¥¸ ê°ì²´ì ìí¥ì ì£¼ì§ ììµëë¤.
const mushrooms1 = {
amanita: ["muscaria", "virosa"],
};
const mushrooms2 = structuredClone(mushrooms1);
mushrooms2.amanita.push("pantherina");
mushrooms1.amanita.pop();
console.log(mushrooms2.amanita); // ["muscaria", "virosa", "pantherina"]
console.log(mushrooms1.amanita); // ["muscaria"]
ê°ì²´ ì ì¡
ì´ë² ìì ììë ArrayBuffer
를 ìì±í ë¤ì ê·¸ê²ì 멤ë²ë¡ ê°ì§ë ê°ì²´ë¥¼ ë³µì íì¬ ë²í¼ë¥¼ ì ì¡í©ëë¤. ë³µì ë ê°ì²´ìì ë²í¼ë¥¼ ì¬ì©í ì ìì§ë§, ìë ë²í¼ë¥¼ ì¬ì©íë ¤ê³ íë©´ ìì¸ê° ë°ìí©ëë¤.
// ë°ì´í¸ í¬ê¸°ì ArrayBuffer ìì±
const buffer1 = new ArrayBuffer(16);
const object1 = {
buffer: buffer1,
};
// ë²í¼ë¥¼ í¬í¨íì¬ ê°ì²´ë¥¼ ë³µì íê³ ì ì¡
const object2 = structuredClone(object1, { transfer: [buffer1] });
// ë³µì ë ë²í¼ìì ë°°ì´ ìì±
const int32View2 = new Int32Array(object2.buffer);
int32View2[0] = 42;
console.log(int32View2[0]);
// ìë ë²í¼ìì ë°°ì´ì ìì±íë©´ TypeErrorê° ë°ìí©ëë¤.
const int32View1 = new Int32Array(object1.buffer);
ëª
ì¸ì ë¸ë¼ì°ì í¸íì± ê°ì´ 보기
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4