عند العمل مع JavaScript، يعد فهم الفرق بين النسخة السطحية والنسخة العميقة أمرًا ضروريًا للمعالجة الفعالة للكائنات والمصفوفات. دعنا نتعمق في ما تعنيه هذه المصطلحات وكيفية تنفيذ كل نوع من النسخ في التعليمات البرمجية الخاصة بك.
نسخة سطحية
تُنشئ النسخة السطحية كائنًا أو مصفوفة جديدة تحمل نفس قيم النسخة الأصلية. ومع ذلك، إذا كان الأصل يحتوي على كائنات أو مصفوفات متداخلة، فإن النسخة السطحية تنسخ فقط المراجع إلى هذه الهياكل المتداخلة، وليس الهياكل نفسها. وهذا يعني أن التغييرات التي يتم إجراؤها على الكائنات أو المصفوفات المتداخلة في البنية المنسوخة ستؤثر أيضًا على النسخة الأصلية.
أمثلة على طرق النسخ الضحلة:
const original = { a: 1, b: { c: 2 } }; const shallowCopy = { ...original };
هنا، يعتبر SollCopy كائنًا جديدًا، ولكن لا يزال SollCopy.b يشير إلى نفس الكائن مثل original.b.
2.Object.assis()
const shallowCopy = Object.assign({}, original);
const originalArray = [1, 2, 3]; const shallowCopyArray = originalArray.slice();
نسخة عميقة
تقوم النسخة العميقة بإنشاء كائن أو مصفوفة جديدة تكون نسخة كاملة ومستقلة من الأصل، بما في ذلك كافة الكائنات والمصفوفات المتداخلة. التغييرات في النسخة العميقة لا تؤثر على النسخة الأصلية والعكس صحيح.
أمثلة على طرق النسخ العميق:
const original = { a: 1, b: { c: 2 } }; const deepCopy = JSON.parse(JSON.stringify(original));
تقوم هذه الطريقة بتسلسل الكائن إلى سلسلة JSON ثم تحليله مرة أخرى إلى كائن جديد. ومع ذلك، فهو لا يتعامل مع الوظائف أو المراجع غير المحددة أو الدائرية.
2.وظيفة العودية
function deepCopy(obj) { if (obj === null || typeof obj !== 'object') return obj; const copy = Array.isArray(obj) ? [] : {}; for (let key in obj) { if (obj.hasOwnProperty(key)) { copy[key] = deepCopy(obj[key]); } } return copy; }
const deepCopy = structuredClone(original);
متى يجب استخدام كل منها
النسخة الضحلة: مناسبة للكائنات البسيطة أو المصفوفات التي لا تحتوي على بنيات متداخلة. إنه أسرع ويستخدم ذاكرة أقل. استخدمه عندما تحتاج إلى نسخة سريعة حيث يجب أن تنعكس التغييرات التي يتم إجراؤها على الكائنات المتداخلة في كل من النسخة الأصلية والنسخة.
نسخة عميقة: ضرورية للكائنات المعقدة أو المصفوفات ذات الهياكل المتداخلة. ويضمن أن التغييرات في النسخة لا تؤثر على الأصل. استخدمه عندما تحتاج إلى نسخ مستقلة تمامًا.
يساعد فهم هذه الاختلافات في منع الأخطاء التي تنشأ من المراجع المشتركة غير المقصودة ويضمن سلامة البيانات في تطبيقاتك
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3