ΠΡΠ°Π½ΡΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² JavaScript
Π ΡΠ·ΡΠΊΠ΅ JavaScript ΠΊΠ»ΡΡΠ΅Π²ΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ β ΡΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ
, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ
ΡΠ°Π½ΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ
Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°Π½ΠΎ Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ β ΡΡΡΠΎΠΊΠΎΠΉ ΠΈΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠ° Symbol
. ΠΠ±ΡΠ΅ΠΊΡΡ Π² JS ΡΠ²Π»ΡΡΡΡΡ ΠΎΡΠ½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠ½ΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΠΈΠ΅ΡΠ°ΡΡ
ΠΈΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅. ΠΠ½ΠΈ Π»Π΅ΠΆΠ°Ρ Π² ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ
Π½Π΅ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΡ
ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ
, ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ ΠΌΠ°ΡΡΠΈΠ²Ρ, ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°, ΠΌΠ°ΠΏΡ ΠΈ Π΄Π°ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π² JS ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ ΡΠ²Π»ΡΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ. Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠΈΡΠ»Π° ΠΈ ΡΡΡΠΎΠΊΠΈ, ΠΌΠΎΠ³ΡΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΡΡΠ΅Π΄ΠΎΠΉ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Ρ ΠΊΠΎΡΠΎΡΡΡ
Π΅ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ.
ΠΡΠΎΠΌΠ΅ ΠΎΡΠ½ΠΎΠ²Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°, ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² JavaScript β ΡΡΠΎ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Ρ ΡΠ°Π½ΠΈΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΎΡΠ½ΠΎΡΡΡΠΈΠ΅ΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΈ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π· ΡΠ²ΡΠ·ΠΈ ΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΡΠΈΠΌΠΈ ΡΡΡΡΠΊΡΡΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ Π΅ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π½ΡΠ°Π½ΡΠΎΠ², ΠΈ ΡΠ΅Π³ΠΎΠ΄Π½Ρ Ρ Ρ ΠΎΡΠ΅Π» Π±Ρ ΠΎΠ±ΡΡΠ΄ΠΈΡΡ Π½ΡΠ°Π½ΡΡ ΡΠ°ΠΊΠΎΠΉ ΡΠ°ΡΡΠΎ Π²ΡΡΡΠ΅ΡΠ°ΡΡΠ΅ΠΉΡΡ Π·Π°Π΄Π°ΡΠΈ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² JavaScript.
ΠΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠ½ΡΠ΅ ΠΊΠΎΠΏΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²
Π JavaScript Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΊΠΎΠΏΠΈΡΡΡΡΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ Π½Π° ΡΡΠ΅ΠΉΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ ΡΠ°Π½ΠΈΡΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π² Π΄ΡΡΠ³ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΠΏΡΠΈΠ²Π΅Π΄ΡΡ Π»ΠΈΡΡ ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠΉ ΡΡΡΠ»ΠΊΠΈ, Π½ΠΎ Π½Π΅ ΠΊ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°:
const object = { a: 1, b: 2 };
const clone = object;
console.log(object === clone); // true
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΈ Π²Π½Π΅ΡΠ΅Π½ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Ρ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΊ Π»ΡΠ±ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΠΌΠ΅Π½ΡΡΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ:
object.a = 2;
clone.b = 3;
console.log(object); // { a: 2, b: 3 }
console.log(clone); // { a: 2, b: 3 }
Π§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΡ ΠΊΠΎΠΏΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ Object.assign()
:
const object = { a: 1, b: 2 };
const clone = Object.assign({}, object);
console.log(object === clone); // false
ΠΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ...
:
const object = { a: 1, b: 2 };
const clone = { ...object };
console.log(object === clone); // false
Π’Π°ΠΊΠΆΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈ Π² ΡΠΈΠΊΠ»Π΅ for...in
ΠΏΠ΅ΡΠ΅Π±ΡΠ°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΡΡΠΎΠ±Ρ ΠΈΡΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ
Π² Π½ΠΎΠ²ΡΠΉ:
const object = { a: 1, b: 2 };
const clone = {};
for (const key in object) {
clone[key] = object[key];
}
console.log(object === clone); // false
ΠΡΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ βΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠ½ΡΡ β ΠΊΠΎΠΏΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Ρ ΠΊΠΎΡΠΎΡΡΡ Π½Π΅Ρ ΡΠ²ΠΎΠΉΡΡΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ Π΄ΡΡΠ³ΠΈΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½Ρ Π½Π΅ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π° ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅:
const object = { a: 1, b: { c: 2 } };
const clone = { ...object };
object.b.c = 3;
console.log(clone.b); // { c: 3 }
console.log(object.b.c === clone.b.c); // true
ΠΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄Π»Ρ Π»ΡΠ±ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ: ΡΠ°ΠΌΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈΠ»ΠΈ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ-ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ Π΄ΡΡΠ³ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡΠΈΡ ΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅.
ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° Π·Π°Π΄Π°Ρ Ρ Π²Π°ΡΠ°Π΅Ρ ΠΏΠ»ΠΎΡΠΊΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΈ Π² ΡΠ΅Π»ΠΎΠΌ Ρ ΠΎΡΠΎΡΠ΅ΠΉ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ΅ΠΌΠΈΡΡΡΡ ΠΊ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ ΠΈ βΡΠΏΠ»ΠΎΡΠ΅Π½ΠΈΡβ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠ½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΡΠΎ ΠΏΡΠΎΡΡΠ°Ρ ΠΈ Π±ΡΡΡΡΠΎΠ²ΡΠΏΠΎΠ»Π½ΠΈΠΌΠ°Ρ Π·Π°Π΄Π°ΡΠ° Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΏΡΠΈΠ½ΡΡΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΡΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ ΡΠΈΠΏΠ° React.js, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠ½ΠΎΠ³ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΡΠΎΠΏΡΠΎΠ² Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅Π½Π΄Π΅ΡΠ°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ².
ΠΠ»ΡΠ±ΠΎΠΊΠΎΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²
ΠΠΎ Π½Π΅ Π²ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ»ΠΎΡΠΊΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠ½ΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ βΠ³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎβ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ ΠΎΠ±Ρ ΠΎΠ΄ΠΈΡ ΠΈ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ Π²ΡΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π½Π΅ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅, Π° ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠ°ΠΊΠΈΡ Π·Π°Π΄Π°Ρ:
- ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΊΠΎΠΏΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π½ΡΠΌΠΈ Π±ΡΠ°ΡΠ·Π΅ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°ΠΌΠΈ: ΠΎΠΊΠ½Π°ΠΌΠΈ, ΡΡΠ΅ΠΉΠΌΠ°ΠΌΠΈ ΠΈ Π²ΠΎΡΠΊΠ΅ΡΠ°ΠΌΠΈ;
- ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΏΠΊΠΎΠ² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ Π΄Π»Ρ ΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ ΠΈ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΡΡΠΎΡΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ;
- ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π΄Π°Π½Π½ΡΡ Π² Π±ΡΡΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ;
- ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΉ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ΅ΡΡΠΎΠ²;
- ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ ΠΈ ΠΈΠ·ΠΎΠ»ΡΡΠΈΡ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΎΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
ΠΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΈ ΠΏΡΡΠΌΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΌΠΈ Π»ΡΠ±ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠΈΠΆΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ°ΠΌΡΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΈ Π½ΡΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
Π‘ΠΏΠΎΡΠΎΠ±Ρ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²
JSON.parse(JSON.stringify(object))
ΠΡΠΎΡ ΡΠΏΠΎΡΠΎΠ± ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΠΎ , Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΈΠΏΠ°ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ, Ρ.Π΅. ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Ρ ΠΊ ΡΡΡΠΎΠΊΠ΅ ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ ΠΈΠ· ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅. Π ΡΠ°Π·ΡΠ΅ΡΡΠ½Π½ΡΠΌ ΡΠΈΠΏΠ°ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΡΠΈΠΏΡ, Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON β ΡΡΠΎ ΡΡΡΠΎΠΊΠΈ, ΡΠΈΡΠ»Π°, Π±ΡΠ»Π΅Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ null
.
ΠΠ½Π°ΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Ρ
ΠΎΡΡΠ°Π»ΡΠ½ΡΡ
ΡΠΈΠΏΠΎΠ² ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΠΊ ΡΡΡΡΠΊΡΡΡΠ΅ ΡΠΎΡΠΌΠ°ΡΠ° JSON ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ. ΠΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΎΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Ρ (Π² ΡΠ»ΡΡΠ°Π΅ Ρ undefined
ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π² Π²ΠΈΠ΄Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ), Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ Π½Π° ΠΏΡΡΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ {}
(ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠ°ΠΊΠΈΠΌΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌΠΈ ΡΡΡΡΠΊΡΡΡΠ°ΠΌΠΈ ΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ Set
, Map
, RegExp
, Error
ΠΈ ΠΏΡ.), ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌ ΠΈΠ»ΠΈ ΡΠ°ΠΌΠΎΠΏΠΈΡΠ½ΡΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ toJSON()
Π² ΡΠ»ΡΡΠ°Π΅ Π΅Π³ΠΎ Π½Π°Π»ΠΈΡΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ½ ΠΎΠΏΠΈΡΠ°Π½ Π²ΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ Date
), ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Ρ ΠΊ ΡΠΎΡΠΌΠ°ΡΡ JSON ΠΈΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ.
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΡΠ»ΡΡΠ°Π΅Π² ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΊ JSON-ΡΡΡΠΎΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° MDN .
Π‘Π΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° JSON:
const object = {
set: new Set([1, 3, 3]),
regex: /abc/,
date: new Date(123),
string: "hello",
array: [false, 1, "2"],
node: document.body,
function() {
return 123;
},
withToJSON: {
a: 1,
toJSON() {
return { a: 2 };
},
},
obj: {
a: 1,
b: {
c: 2,
},
},
};
const clone = JSON.parse(JSON.stringify(object));
ΠΠΎΡΠ»Π΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π² clone
:
{
"set": {},
"regex": {},
"date": "1970-01-01T00:00:00.123Z",
"string": "hello",
"array": [
false,
1,
"2"
],
"node": {},
"withToJSON": {
"a": 2
},
"obj": {
"a": 1,
"b": {
"c": 2
}
}
}
Π£ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Π΅ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ: ΠΎΠ½ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ βΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈβ, ΡΠΎ Π΅ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΎΡΠΈΠ±ΠΊΡ ΠΊΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΠΈ:
const object = { a: 1 };
object.a = object;
console.log(JSON.stringify(object)); // Uncaught TypeError: Converting circular structure to JSON
ΠΡΠΈΠ±ΠΊΠ° Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π° ΠΈ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° BigInt
:
const object = { a: 100000n };
console.log(JSON.stringify(object)); // Uncaught TypeError: Do not know how to serialize a BigInt
ΠΡΠ°Π½ΡΠ°ΠΌΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ replacer
, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠΉ Π² JSON.stringify()
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²ΡΠΎΡΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. Π ΡΡΠΎΠΉ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΠΈΠ΅ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
const object = { a: 1, b: 100000n };
object.a = object;
const replacer = (key, value) => {
value = typeof value === "bigint" ? String(value) : value;
return key === "a" ? undefined : value;
};
const clone = JSON.parse(JSON.stringify(object, replacer));
console.log(clone); // { b: '100000' }
ΠΠΎΡ
ΠΎΠΆΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΈ Ρ ΠΌΠ΅ΡΠΎΠ΄Π° JSON.parse()
β ΠΎΠ½ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ reviver
ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π½ΡΠ°Π½ΡΡ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ (Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΠ· ΡΡΡΠΎΠΊΠΈ):
const object = { date: new Date(123) };
const stringifiedObject = JSON.stringify(object);
console.log(stringifiedObject); // '{"date":"1970-01-01T00:00:00.123Z"}'
const reviver = (key, value) => {
return key === "date" ? new Date(value).getMilliseconds() : value;
};
console.log(JSON.parse(stringifiedObject, reviver)); // { date: 123 }
v8.deserialize(v8.serialize(object))
Π‘ΡΡΠΎΠΊΠΎΠ²Π°Ρ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠ΅ΡΠ΅Π· ΠΌΠ΅ΡΠΎΠ΄Ρ JSON.stringify()
ΠΈ JSON.parse()
Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΈ Π² ΡΡΠ΅Π΄Π΅ Node.js. ΠΡΠΎΠΌΠ΅ ΡΡΠΎΠ³ΠΎ Π² Node.js Π΅ΡΡΡ Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ
ΠΎΠΆΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π±ΠΈΠ½Π°ΡΠ½ΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠΈΠ½Π°ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΡΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
const v8 = require("v8");
const object = {
set: new Set([1, 3, 3]),
regex: /abc/,
date: new Date(123),
string: "hello",
array: [false, 1, "2"],
obj: {
a: 1,
b: {
c: 2,
},
},
};
const clone = v8.deserialize(v8.serialize(object));
ΠΠ΅ΡΠΎΠ΄ v8.serialize()
ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ JSON.stringify()
ΠΈ Π΄Π°ΡΡ ΠΈΠ½ΠΎΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΡΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²:
{
set: Set(2) { 1, 3 },
regex: /abc/,
date: 1970-01-01T00:00:00.123Z,
string: 'hello',
array: [ false, 1, '2' ],
obj: { a: 1, b: { c: 2 } }
}
ΠΠΎΠΏΡΡΠΊΠ° ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠ²ΠΎΠΉΡΡΠ², ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅:
const object = {
function() {
return 123;
},
};
v8.serialize(object); // Uncaught Error: function() { return 123; } could not be cloned
ΠΠΈΠ½Π°ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ:
const object = { a: 1 };
object.a = object;
console.log(v8.serialize(object)); // <ref *1> { a: [Circular *1] }
console.log(v8.serialize(object.a)); // <ref *1> { a: [Circular *1] }
console.log(v8.serialize(object.a.a.a.a)); // <ref *1> { a: [Circular *1] }
lodash.cloneDeep(object)
Π€ΡΠ½ΠΊΡΠΈΡ cloneDeep
ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ lodash
β ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². cloneDeep
ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡΡΠ΅Ρ ΠΈΡ
ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΡΠΌ Π² ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ.
cloneDeep
ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ, ΠΈ Π½Π΅ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ, ΠΊΠΎΠΏΠΈΡΡΡ ΠΈΡ
ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅, Π° Π½Π΅ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π’Π°ΠΊΠΎΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅ΡΠΎΠ΄ Object.create()
, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π·Π°Π΄Π°ΡΡ Π΅ΠΌΡ ΠΏΡΠΎΡΠΎΡΠΈΠΏ Π² Π²ΠΈΠ΄Π΅ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΏΠ΅ΡΠ΅ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅Ρ ΡΡΠΎΡ ΠΏΡΠΎΡΠΎΡΠΈΠΏ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°-ΠΊΠΎΠΏΠΈΠΈ:
import _ from "lodash";
const func = () => 123;
const object = { func };
const clone = _.cloneDeep(object);
// ΠΠΌΡΠ»ΠΈΡΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ cloneDeep: ΡΠΎΠ·Π΄Π°ΡΠΌ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΎΠΌ
// Π² Π²ΠΈΠ΄Π΅ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΏΠ΅ΡΠ΅ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ ΡΡΠΎΡ ΠΏΡΠΎΡΠΎΡΠΈΠΏ Π² Π½ΠΎΠ²ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
const funcClone = Object.getPrototypeOf(Object.create(func));
// Π‘ΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅
console.log(funcClone === object.func); // true
console.log(funcClone === clone.func); // true
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, cloneDeep
Π½Π΅ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΈΡ
ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠ°-ΠΊΠΎΠΏΠΈΠΈ Ρ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΌ Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
structuredClone(object)
ΠΠ»ΡΠ±ΠΎΠΊΠΎΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°ΠΌΠΎΠΉ ΡΡΠ΅Π΄ΠΎΠΉ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° JavaScript Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ
Π·Π°Π΄Π°Ρ. ΠΠ° ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
Π±ΡΠ°ΡΠ·Π΅ΡΠ½ΡΡ
API ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ structured clone algorithm . ΠΡΠΎΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΠΏΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΅Π³ΠΎ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΠΎΡΠΊΠ΅ΡΠ°ΠΌΠΈ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅ΡΠΎΠ΄ postMessage()
, Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
Π² IndexedDB
, Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ΅ΡΠ΅Π²ΡΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΈ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΡΡΠ΅ΠΌ Π² Service Workers API
ΠΈ Ρ.Π΄.
Π 2021 Π³ΠΎΠ΄Ρ Π² Π½ΠΎΠ²ΡΡ
Π²Π΅ΡΡΠΈΡΡ
Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠ² ΡΡΠ°Π» Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ structuredClone()
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠΎΠΏΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Ρ Π³Π»ΡΠ±ΠΎΠΊΠΈΠΌ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅Ρ
ΡΡΠΎΠ²Π½Π΅ΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π²ΡΡ ΡΠΎΡ ΠΆΠ΅ structured clone algorithm. structuredClone()
Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ° ECMAScript, Π½ΠΎ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π² ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π²Π΅ΡΡΠΈΡΡ
Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠ² ΠΈ Π΄ΡΡΠ³ΠΈΡ
Ρ
ΠΎΡΡ-ΡΠΈΡΡΠ΅ΠΌΠ°Ρ
JavaScript.
Π’Π°Π±Π»ΠΈΡΡ Π±ΡΠ°ΡΠ·Π΅ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° caniuse.com .
structuredClone()
ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π² ΡΡΠ΅Π΄Π°Ρ
Node.js >= 17.0.0 ΠΈ Deno >= 1.13.
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ structuredClone()
:
const object = {
set: new Set([1, 3, 3]),
regex: /abc/,
date: new Date(123),
string: "hello",
array: [false, 1, "2"],
obj: {
a: 1,
b: {
c: 2,
},
},
};
const clone = structuredClone(object);
ΠΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ clone
Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
{
set: Set(2) { 1, 3 },
regex: /abc/,
date: 1970-01-01T00:00:00.123Z,
string: "hello",
array: [false, 1, "2"],
obj: {
a: 1,
b: {
c: 2
}
},
}
ΠΡΠΎΡ ΡΠΏΠΎΡΠΎΠ± Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈ DOM-ΡΠ·Π»Ρ, ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ°ΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ Π±ΡΠΎΡΠ΅Π½ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ DataCloneError
:
const func = () => 123;
const object = { func };
const clone = structuredClone(object); // Uncaught DOMException: Failed to execute 'structuredClone' on 'Window': () => 123 could not be cloned
const node = document.body;
const object = { node };
const clone = structuredClone(object); // Uncaught DOMException: Failed to execute 'structuredClone' on 'Window': HTMLBodyElement object could not be cloned
structuredClone()
Π½Π΅ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ Π΄Π΅ΠΊΡΡΠΈΠΏΡΠΎΡΡ ΡΠ²ΠΎΠΉΡΡΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΡΠ΅ΡΡΠ΅ΡΡ ΠΈ Π³Π΅ΡΡΠ΅ΡΡ, ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Ρ Π³Π΅ΡΡΠ΅ΡΠΎΠΌ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π° Π½Π΅ ΡΠ°ΠΌΡ ΡΡΠ½ΠΊΡΠΈΡ-Π³Π΅ΡΡΠ΅Ρ:
const object = {
get func() {
return 123;
},
};
const clone = structuredClone(object);
console.log(clone); // { func: 123 }
Π’Π°ΠΊΠΆΠ΅ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»ΠΈ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°, ΡΠ΅ΠΏΠΎΡΠΊΠ° ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΎΠ² Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΠ΅ΡΡΠ½Π°, ΠΈ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΠΊΠ»Π°ΡΡ, ΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠ½ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΡΡ:
class A {
constructor() {
this.a = 1;
}
}
const object = new A();
const clone = structuredClone(object);
console.log(object instanceof A); // true
console.log(clone instanceof A); // false
ΠΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠΈΠΏΠΎΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠΈΡ
Π΄Π»Ρ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ structuredClone()
, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° MDN .
ΠΠ°ΠΆΠ½ΠΎ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ, ΡΡΠΎ structuredClone()
ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ Π²Π½ΡΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ JSON.stringify()
.
ΠΠ°ΠΊΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ±ΡΠ°ΡΡ, ΠΏΠ»ΡΡΡ ΠΈ ΠΌΠΈΠ½ΡΡΡ
ΠΠ»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° Π·Π°Π΄Π°Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡΡ ΡΠΏΠΎΡΠΎΠ±Ρ βΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΠ½ΠΎΠ³ΠΎβ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Object.assign()
ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ...
. ΠΡΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Ρ Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ ΠΈ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΏΠΈΠΈ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΡ
βΠΏΠ»ΠΎΡΠΊΠΈΡ
β ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π½ΠΎ ΠΈ ΡΠΎΡΡΠ°Π²Π»ΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΠ· ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ
:
const object1 = { a: 1 };
const object2 = { b: 2 };
const result = { ...object1, ...object2 };
console.log(result); // { a: 1, b: 2 }
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΊΠ»Π° for...in
ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ βΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΠ½ΠΎΠΉβ ΠΊΠΎΠΏΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΆΠ΅Π½ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ ΠΈ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Ρ
ΠΈΠ»ΠΈ ΠΈΠ½ΡΡ
ΡΠ²ΠΎΠΉΡΡΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
ΠΠ»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π·Π°Π΄Π°Ρ βΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠ½ΡΡ β ΠΊΠΎΠΏΠΈΠΉ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ»ΠΎΡΠΊΠΈΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ. ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ βΠ³Π»ΡΠ±ΠΎΠΊΠΈΡ β ΠΊΠΎΠΏΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ², ΠΈ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ Π΅ΡΡΡ ΡΠ²ΠΎΠΈ ΠΏΠ»ΡΡΡ ΠΈ ΠΌΠΈΠ½ΡΡΡ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΈ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅ΡΠΎΠ΄Ρ JSON.stringify()
ΠΈ JSON.parse()
β ΡΡΠΎ ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΠ°Ρ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Π΄Π²ΠΈΠΆΠΊΠ°ΠΌΠΈ Π·Π°Π΄Π°ΡΠ°, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΌΡΠΉ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ ΡΠΈΠΏΠ°ΠΌ Π΄Π°Π½Π½ΡΡ
. ΠΡΠΎΡ ΡΠΏΠΎΡΠΎΠ± ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅, ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΌ Ρ JSON, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½Ρ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ HTTP-Π·Π°ΠΏΡΠΎΡΠ°.
ΠΡΠ΄Π° Π±ΠΎΠ»ΡΡΠΈΠΉ Π½Π°Π±ΠΎΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
Π΄Π»Ρ ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ
ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ serialize
ΠΈ deserialize
ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ v8
, Π½ΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· ΡΡΠ΅Π΄Ρ Node.js.
ΠΠ°ΠΈΠ±ΠΎΠ»ΡΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Ρ Π² Π²ΡΠ±ΠΎΡΠ΅ ΡΠΈΠΏΠΎΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΠΏΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ cloneDeep
ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ lodash
. ΠΡΠΎ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΉ, ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΡΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ Ρ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ
ΡΡΠΈΠ»ΠΈΡ, ΠΈ ΠΎΠ½ ΡΠΆΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ
ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
. ΠΠ΄Π½Π°ΠΊΠΎ lodash
β ΡΡΠΎ Π²Π½Π΅ΡΠ½ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π»ΠΈΡΠ½ΠΈΠ΅ 70ΠΠ± Π² ΠΎΠ±ΡΠΈΠΉ Π±Π°Π½Π΄Π», Π² ΡΠ»ΡΡΠ°Π΅ Π΅ΡΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π±ΡΠ»Π° ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π° ΡΠ΅Π»ΠΈΠΊΠΎΠΌ, ΠΈ ΠΎΠΊΠΎΠ»ΠΎ 17ΠΠ± β Π΅ΡΠ»ΠΈ ΡΡΠ°Π±ΠΎΡΠ°Π» ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ tree shaking ΠΏΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ cloneDeep
. ΠΡΠ»ΠΈ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΊΡΠΈΡΠΈΡΠ½ΠΎ ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΡΡΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π²Π½Π΅ΡΠ½ΠΈΡ
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ βΠ³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎβ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΠΈΡΠ²Π°Π΅Ρ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ:
const cloneDeep = (obj, visited = new WeakMap()) => {
// ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, Π±ΡΠ» Π»ΠΈ ΡΠΆΠ΅ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ
if (visited.has(obj)) {
return visited.get(obj);
}
if (typeof obj !== "object" || obj === null) {
return obj; // ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π΅Π³ΠΎ ΠΆΠ΅
}
// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ² Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΈΠΏΠ° obj
const newObj = Array.isArray(obj) ? [] : {};
// Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ΅ΡΡΠ½Π½ΡΠΉ
visited.set(obj, newObj);
// Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°
for (let key in obj) {
// ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌ (Π½Π΅ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠΌ)
if (Object.prototype.hasOwnProperty.call(obj, key)) {
// Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ
newObj[key] = cloneDeep(obj[key], visited);
}
}
return newObj;
};
ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²Π½ΡΡΡΠΈ ΡΠΈΠΊΠ»Π° for...in
ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π΅ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ
ΡΠΈΠΏΠΎΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
ΠΠ»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΡΡ
Π·Π°Π΄Π°Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΠΎΠ²ΡΠΌ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌ Π² Π±ΡΠ°ΡΠ·Π΅Ρ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ΅Π΄Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ structuredClone()
. ΠΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎΠΌ ΡΠΈΠΏΠΎΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ DOM-ΡΠ·Π»Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠ²ΠΎΠΉΡΡΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠ΅ΡΠΎΠ΄ structuredClone()
ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ structured clone algorithm, ΠΊΠΎΡΠΎΡΡΠΉ Ρ
ΠΎΡΠΎΡΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ transferable objects .
Transferable objects β ΡΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ JavaScript ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, ΠΈ ΠΏΠ΅ΡΠ΅ΡΡΠ°ΡΡ Π±ΡΡΡ ΠΎΡΠΊΡΡΡΡ Π΄Π»Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΠΏΠΎΡΠ»Π΅ ΠΈΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΡΡΡΡ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ Π²ΡΠ΄Π΅ΡΠΆΠΊΠΈ ΠΈΠ· MDN ΠΎ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ transferable objects:
Transferable objects ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠ΅Π½Ρ, Π° Π½Π΅ ΠΏΡΠΎΠ΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½Ρ Π² ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°
transfer
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°options
. ΠΡΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π΅ΠΏΡΠΈΠ³ΠΎΠ΄Π½ΡΠΌ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ β Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄Π°Π½Π½ΡΡ Π² Π±ΡΡΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ. Π§ΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π±ΡΡΠ΅ΡΠ° Π΄ΠΎ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ , ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ Π±ΡΡΠ΅Ρ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅. ΠΡΠ»ΠΈ Π²Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΄ΠΈΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π»ΡΠ±ΡΠ΅ ΠΏΠΎΠΏΡΡΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ Π±ΡΡΠ΅Ρ Π±ΡΠ΄ΡΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΡΠΌΠΈ, ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡ Π΅Π³ΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΠΏΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
const uInt8Array = Uint8Array.from({ length: 1024 * 1024 * 16 }, (v, i) => i);
console.log(uInt8Array.byteLength); // 16777216
const transferred = structuredClone(uInt8Array, {
transfer: [uInt8Array.buffer],
});
console.log(uInt8Array.byteLength); // 0
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΈ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΡΠ·ΡΠΊΠ΅ JavaScript. Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ Π²ΡΠΏΠΎΠΌΠ½ΠΈΠ»ΠΈ ΠΎ ΡΡΡΠ»ΠΎΡΠ½ΠΎΠΉ ΠΏΡΠΈΡΠΎΠ΄Π΅ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ βΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠ½ΡΡ β ΠΊΠΎΠΏΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠ°Π»Π΅Π΅ ΠΌΡ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»ΠΈΡΡ Ρ ΡΡΠ΄ΠΎΠΌ Π·Π°Π΄Π°Ρ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ βΠΏΠ»ΠΎΡΠΊΠΈΠ΅β ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΈ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎ ΠΈΠ·ΡΡΠΈΠ»ΠΈ Π½ΡΠ°Π½ΡΡ βΠ³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎβ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² JavaScript, ΡΡΠΈΡΡΠ²Π°ΡΡΠ΅Π³ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΌΡ ΡΡΠ°Π²Π½ΠΈΠ»ΠΈ ΡΡΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ, ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ ΠΈΡ ΠΏΠ»ΡΡΡ ΠΈ ΠΌΠΈΠ½ΡΡΡ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΡΠ»ΡΡΠ°ΠΈ, ΠΊΠΎΠ³Π΄Π° Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄.
ΠΡΠΈΠ³Π»Π°ΡΠ°Ρ Π²Π°Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° ΠΌΠΎΠΉ ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌ-ΠΊΠ°Π½Π°Π»: https://t.me/alexgriss , Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ ΠΏΠΈΡΡ ΠΎ ΡΡΠΎΠ½ΡΠ΅Π½Π΄-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅, ΠΏΡΠ±Π»ΠΈΠΊΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ, Π΄Π΅Π»ΡΡΡ ΡΠ²ΠΎΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ ΠΌΠ½Π΅Π½ΠΈΠ΅ΠΌ ΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Ρ ΡΠ΅ΠΌΡ, Π²Π°ΠΆΠ½ΡΠ΅ Π΄Π»Ρ ΠΊΠ°ΡΡΠ΅ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°.