CodeVerse | دنیای برنامه نویسان
چرا کپی کردن یک Object در JavaScript همیشه کپی واقعی نیست؟ 🤔
این کد رو ببین:
const user = {
name: "Ahmad",
settings: {
theme: "dark"
}
};
const copy = { ...user };
copy.name = "Ali";
copy.settings.theme = "light";
console.log(user.name);
// Ahmad
console.log(user.settings.theme);
// light 😐
چی شد؟!
ما که user رو کپی کرده بودیم!
مشکل اینجاست که Spread Operator فقط یک Shallow Copy میسازه.
یعنی لایه اول Object کپی میشه، ولی Objectهای تودرتو همچنان به همان Reference قبلی اشاره میکنن.
پس:
copy.settings === user.settings
// true
اما برای کپی عمیق میتونی از ()structuredClone استفاده کنی:
const copy = structuredClone(user);
copy.settings.theme = "light";
console.log(user.settings.theme);
// dark
حالا:
copy.settings === user.settings
// false
🔥 این تفاوت توی پروژههایی که با State، API Response یا Objectهای تودرتو کار میکنی خیلی مهمه.
نکته حرفهای:
تابع JSON.parse(JSON.stringify(obj)) هم یک روش قدیمی برای Deep Copy محسوب میشه، اما محدودیتهای مهمی داره و برای همه دادهها مناسب نیست.
اگر با JavaScript حرفهای کار میکنی، ()structuredClone رو بشناس.
@CodeVerse_dev
6 · 360 ·