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

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

تم النشر بتاريخ 2024-08-19
تصفح:838

Shallow Copy vs Deep Copy in JavaScript

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

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

أمثلة على طرق النسخ الضحلة:

  1. عامل الانتشار ({...})
const original = { a: 1, b: { c: 2 } };
const shallowCopy = { ...original };

هنا، يعتبر SollCopy كائنًا جديدًا، ولكن لا يزال SollCopy.b يشير إلى نفس الكائن مثل original.b.

2.Object.assis()

const shallowCopy = Object.assign({}, original);
  1. طريقة شريحة الصفيف
const originalArray = [1, 2, 3];
const shallowCopyArray = originalArray.slice();

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

أمثلة على طرق النسخ العميق:

  1. JSON.stringify() وJSON.parse()
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;
}

  1. StructuredClone() (في بيئات JavaScript الحديثة)
const deepCopy = structuredClone(original);

متى يجب استخدام كل منها

  • النسخة الضحلة: مناسبة للكائنات البسيطة أو المصفوفات التي لا تحتوي على بنيات متداخلة. إنه أسرع ويستخدم ذاكرة أقل. استخدمه عندما تحتاج إلى نسخة سريعة حيث يجب أن تنعكس التغييرات التي يتم إجراؤها على الكائنات المتداخلة في كل من النسخة الأصلية والنسخة.

  • نسخة عميقة: ضرورية للكائنات المعقدة أو المصفوفات ذات الهياكل المتداخلة. ويضمن أن التغييرات في النسخة لا تؤثر على الأصل. استخدمه عندما تحتاج إلى نسخ مستقلة تمامًا.

يساعد فهم هذه الاختلافات في منع الأخطاء التي تنشأ من المراجع المشتركة غير المقصودة ويضمن سلامة البيانات في تطبيقاتك

بيان الافراج هذه المقالة مستنسخة على: https://dev.to/sagarj521/shallow-copy-vs-deep-copy-in-javascript-4dmo?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3