هل سبق لك أن حاولت نسخ كائن في Javascript باستخدام عامل الانتشار (...)، لكنك أدركت أن التغييرات التي يتم إجراؤها على الأصل لا تزال تؤثر على النسخة؟ قد يكون الأمر محبطًا عندما تتوقع نسخة مستقلة عن النسخة الأصلية ولكن ينتهي بك الأمر بالحصول على نسخة مرتبطة بالأصل. هذه مشكلة شائعة عند التعامل مع الكائنات العميقة، ويمكن أن تؤدي إلى أخطاء غير متوقعة. لحسن الحظ، جافا سكريبت لديها طريقة StructuredClone() لحل هذه المشكلة
للبدء، يتم استخدام طريقة StructuredClone() في Javascript لعمل نسخ عميقة من الكائنات، بما في ذلك تلك ذات الهياكل المتداخلة مثل المصفوفات والكائنات وأنواع البيانات المعقدة الأخرى.
ربما تتساءل: ما هي بالضبط النسخة، وكم عدد أنواع النسخ الموجودة لدينا في JavaScript؟ حسنًا، لدينا النسخ الضحلة والعميقة. على الرغم من أننا نعلم أن StructuredClone() ينشئ الأخير، فإن استخدام عامل الانتشار ينشئ الأول.
نسخة سطحية تنسخ فقط خصائص المستوى الأعلى للكائن، مما يعني أنه لا يزال يتم الرجوع إلى الكائنات أو المصفوفات المتداخلة من الأصل. من ناحية أخرى، تعمل النسخة العميقة على تكرار كل شيء، بما في ذلك الهياكل المتداخلة، مما يضمن أن يكون النسخ مستقلاً تمامًا عن الأصل وعنه.
دعونا نرى بعض الأمثلة على النسخ الضحلة والعميقة في جافا سكريبت
مثال للنسخة الضحلة
const person = { name: "John Doe", languages: [ "English", "German" ] }; const personClone = {...person}; // shallow copy // Modify the languages array in the cloned object personClone.languages.push("Spanish"); // Check the original and the cloned object console.log(person.languages); // Output: ["English", "German", "Spanish"] console.log(personClone.languages); // Output: ["English", "German", "Spanish"] console.log(person.languages === personClone.languages) // true // However, changing a primitive value won't affect the original personClone.name = "Jane Doe"; console.log(person.name); // Output: "John Doe" console.log(personClone.name); // Output: "Jane Doe" console.log(person.name === personClone.name) // falseمن الكود أعلاه يمكننا أن نقول ما يلي:
مثال للنسخة العميقة
const person = { name: "John Doe", languages: [ "English", "German" ] }; const personClone = {...person}; // shallow copy // Modify the languages array in the cloned object personClone.languages.push("Spanish"); // Check the original and the cloned object console.log(person.languages); // Output: ["English", "German", "Spanish"] console.log(personClone.languages); // Output: ["English", "German", "Spanish"] console.log(person.languages === personClone.languages) // true // However, changing a primitive value won't affect the original personClone.name = "Jane Doe"; console.log(person.name); // Output: "John Doe" console.log(personClone.name); // Output: "Jane Doe" console.log(person.name === personClone.name) // falseمن الكود أعلاه نستنتج ما يلي:
خاتمة
شكرًا لك على قراءة هذا المقال. إذا وجدت هذه المقالة مفيدة، فيرجى الإعجاب بها ومشاركتها مع الآخرين الذين قد يستفيدون من التعرف على النسخ العميق في Javascript
ما هو رأيك في هذا الموضوع؟ هل واجهت تقنيات أخرى لنسخ الكائنات في Javascript؟ لا تتردد في مشاركة أفكارك في قسم التعليقات أدناه.
ملاحظة أنا أبحث حاليًا عن فرص لمطوري الواجهة الأمامية. إذا كان لديك أي عملاء متوقعين أو كنت تقوم بالتوظيف، فلا تتردد في الاطلاع على سيرتي الذاتية أو التواصل معي على LinkedIn. أحب أن أسمع منك!
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3