"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > فهم النسخة العميقة في جافا سكريبت

فهم النسخة العميقة في جافا سكريبت

تم النشر بتاريخ 2024-11-01
تصفح:455

لا تحتاج لغة JavaScript إلى مقدمة، فهي لغة قوية ومتعددة الاستخدامات، ولكن إذا كنت قد عملت معها، فمن المحتمل أنك لاحظت بعض السلوكيات غير العادية. أحدها هو كيفية تعامل جافا سكريبت مع النسخ المتغيرة، خاصة عند العمل مع الكائنات. في هذه المقالة، سوف نستكشف مفهوم النسخ العميق وكيف يساعدنا على تجنب المشاكل غير المتوقعة عند تكرار البيانات في برامجنا.

عندما نقوم بعمل نسخة من متغير، تقوم JavaScript بإنشاء مساحة ذاكرة جديدة وتخزين القيمة المنسوخة هناك؛ ثم يشير المتغير الجديد إلى مساحة الذاكرة الجديدة هذه. على سبيل المثال:


x = 5;
y = x;


يشير

y إلى مساحة ذاكرة جديدة، والتي لها نفس قيمة x ، أي 5 سيكون شيئًا مثل هذا:

Comprendiendo la copia profunda en JavaScript

ينطبق المفهوم أعلاه فقط على القيم البدائية، أما بالنسبة للكائنات فهو مختلف. تخيل أن لدينا الكائنين التاليين:


let a = {
    name: 'Rick',
    lastName: 'Sanchez',
};

let b = a;


في المثال أعلاه، b ليس لديه مساحة ذاكرة خاصة به كما قد نتوقع؛ بدلاً من ذلك، يشير a إلى مساحة الذاكرة حيث يتم تخزين a .

Comprendiendo la copia profunda en JavaScript

ما هي المشاكل التي يمكن أن يسببها هذا السلوك؟ بشكل أساسي، إذا قمت بتغيير أي حقل من a أو b ، فسوف يتغير كلا المتغيرين. قم بتشغيل الكود التالي وتحقق منه بنفسك.


let a = {
    name: 'Rick',
    lastName: 'Sanchez',
};

let b = a;

b.name = 'Morty';

console.log('a: ', a); // a:  { name: 'Morty', lastName: 'Sanchez' }
console.log('b: ', b); // b:  { name: 'Morty', lastName: 'Sanchez' }


الحل لذلك؟ نحتاج إلى عمل نسخة عميقة لحفظ قيمة a في مساحة ذاكرة مستقلة جديدة يشير إليها b.


const b = JSON.parse(JSON.stringify(a));


بهذه الطريقة، نجبر JavaScript على إنشاء مساحة ذاكرة جديدة عن طريق تغيير التنسيق من Object إلى JSON. يتم ذلك باستخدام طريقة stringify، ثم يتم تحويل JSON بمساحة الذاكرة الخاصة به مرة أخرى إلى كائن باستخدام طريقة parse، بحيث يظل كلا المتغيرين مستقلين تمامًا.

هل حدث لك هذا التصرف الغريب من قبل؟ اسمحوا لي أن أعرف في التعليقات، سأكون سعيدًا بقراءتك!

بيان الافراج تم نشر هذه المقالة على: https://dev.to/daniel1775/comprendiendo-la-copia-profunda-en-javascript-2oon?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3