اليوم عندما كنت أنظر إلى الكود الأولي، اكتشفت عامل الحذف.
غير محدد: وظيفة (مفتاح) {
قيمة فار = this._object[key];
احذف هذا._object[key];
قيمة الإرجاع؛
}
لقد راجعت الدليل،
يقوم عامل الحذف بحذف خاصية من كائن أو عنصر من صفيف.
حذف التعبير
معلمة التعبير عبارة عن تعبير JScript صالح، وعادةً ما يكون اسم خاصية أو عنصر صفيف.
الوصف إذا كانت نتيجة التعبير عبارة عن كائن وكانت السمة المحددة في التعبير موجودة، ولا يسمح الكائن بحذفها، فسيتم إرجاع خطأ.
وفي جميع الحالات الأخرى، يعود صحيحًا.
من الجيد رؤية "حذف عنصر من المصفوفة"، ولكن بعد تجربته في ff، يبدو أنه يمكنه حذف قيمة هذا العنصر فقط، وليس العنصر نفسه. ومع ذلك، من الممكن حذف خاصية من كائن.
لقد بحثت في Google مرة أخرى ووجدت مقالة تحتوي على تفاصيل كبيرة، لذا سأعيد نشرها هنا حتى لا أنسى:
العنوان: متغيرات Javascript وحذف بيان حقوق الطبع والنشر للمشغل: يمكنك إعادة الطباعة حسب الرغبة، ولكن يجب عليك الإشارة إلى المؤلف الأصلي charlee والرابط الأصلي http://tech.idv2.com/2008/01/09/javascript-variables-and- احذفه عند إعادة طباعة -operator/ وهذا البيان.
محتوى:
لقد قرأت للتو مقالة جيدة (الرابط الأصلي)، والتي تقدم تحليلاً شاملاً لمشغل الحذف في Javascript. هنا مقدمة موجزة للمحتوى.
على الرغم من كونه عامل حذف صغير، إلا أن سلوكه معقد للغاية.
متغيرات جافا سكريبت
تم حذف الكائن بواسطة عامل الحذف عند تنفيذ الحذف على متغير، والسمات التي يمكن حذفها والسمات التي لا يمكن حذفها، والمتغيرات التي يمكن حذفها، والمتغيرات التي لا يمكن حذفها
القيمة المرجعة للحذف
--------------------------------------------- --- ----------------------------------
متغيرات جافا سكريبت في الواقع، في جافا سكريبت، المتغيرات = خصائص الكائن، وذلك لأن Javascript ستقوم بإنشاء كائن عام قبل تنفيذ البرنامج النصي. جميع المتغيرات العامة هي خصائص لهذا الكائن العام. عند تنفيذ الوظيفة، سيتم أيضًا إنشاء كائن التنشيط. على سبيل المثال:
var global = 42;this.global; // 42، يمكنك الوصول إلى الكائن العام من خلال هذا this.global2 = 12;global2; // 12function foo() { var local = 36; يمكن الوصول إليه مباشرة، // لذلك، لا يمكن الوصول إلى المتغير المحلي من خلال foo.local} الكائن المحذوف بواسطة عامل الحذف
يوجد أيضًا عامل حذف في لغة C++، والذي يحذف الكائن الذي يشير إليه المؤشر. على سبيل المثال:
// C++class Object {public: Object *x;}Object o;ox = new Object();delete ox; // سيتم تحرير كائن الكائن الجديد في السطر السابق، لكن حذف Javascript مختلف من C++، لا يتم حذف الكائن الذي يشير إليه ox، ولكن يتم حذف سمة ox نفسها.
// Javascriptvar o = {};ox = new Object();delete ox; // كائن الكائن الجديد في السطر السابق لا يزال موجودًا ox // غير محدد، يتم حذف الخاصية المسماة x of o في Javascript الفعلية، بعد حذف ox، سيتم تجميع كائن الكائن لأنه فقد مرجعه، لذلك، فإن حذف ox "يعادل" حذف الكائن المشار إليه بواسطة ox، ومع ذلك، فإن هذا الإجراء ليس معيار ECMAScript. حتى لو كان التنفيذ بالكامل، فإن عدم حذف كائن الكائن لا ينتهك معيار ECMAScript.
يمكن تأكيد "حذف السمات بدلاً من حذف الكائنات" من خلال التعليمة البرمجية التالية.
var o = {};var a = { x: 10 };oa = a;delete oa; // تم حذف السمة oa; // unifieda.x; لا يزال مرجعًا، لذلك لن يتم إعادة تدويره، بالإضافة إلى ذلك، يمكن أيضًا كتابة حذف ox كحذف o["x"]، وكلاهما لهما نفس التأثير.
عند حذف متغير، يكون المتغير أيضًا خاصية للكائن العمومي أو كائن التنشيط، وبالتالي فإن عملية الحذف على المتغير لها نفس النتيجة.
var global = 42;حذف Global; يمسح. على سبيل المثال، لا يمكن حذف الخصائص المعلنة في النموذج الأولي:
function C() { this.x = 42; }C.prototype.x = 12;var o = new C();ox; // 42, محدد في المنشئ o .xdelete ox;ox; // 12، لن يتم حذف الثور المحدد في النموذج الأولي حتى إذا تم تنفيذ حذف الثور مرة أخرى. يمكن اعتبار أن هذا النوع من السمات يتمتع بخصائص DontDelete.
var re = /abc/i;delete re.ignoreCase;re.ignoreCase; // صحيح، لا يمكن لـignoreCase حذف المتغيرات التي يمكن حذفها والمتغيرات التي لا يمكن حذفها لا يمكن حذفها.
var x = 36;delete x;x; // 36, x لم يتم حذفه y = 12;delete y;y; // وظيفة غير محددة foo() { return 42; أحد الاستثناءات هو أنه في التعليمات البرمجية التي يتم تنفيذها من خلال التقييم، على الرغم من أن المتغيرات المعلنة من خلال var تنتمي إلى نفس الكائن العام مثل المتغيرات المعلنة عن طريق var العادية، إلا أنها لا تحتوي على سمة DontDelete ويمكن حذفها.
eval("var x = 36;");x; // 42delete x;x; // غير محدد ولكن هناك استثناء للمتغيرات المحددة بواسطة var في الوظيفة في رمز التقييم ولا يمكن حذفها eval(" ( function() { var x = 42; return x;
يعد الحذف عامل تشغيل عادي ويعيد صواب أو خطأ. القاعدة هي: عندما تكون خاصية الكائن المحذوف موجودة ولها خاصية DontDelete، فإنها تُرجع خطأ، وإلا فإنها تُرجع صحيحًا. إحدى الميزات هنا هي أنه يتم إرجاع true حتى في حالة عدم وجود سمة الكائن، وبالتالي فإن قيمة الإرجاع ليست مكافئة تمامًا لما إذا كان الحذف ناجحًا أم لا.
function C() { this.x = 42; C.prototype.y = 12;var o = new C();delete ox; // trueo.x; / ox موجود ولا يوجد DontDelete، قم بإرجاع truedelete oy; // trueo.y; // 12// o نفسه ليس له سمة oy، لذا قم بإرجاع true// من هنا يمكنك أيضًا رؤية وجود سلسلة النموذج الأولي، تختلف سمات الكائن وسمات النموذج الأوليdelete o; // false// Global.o لديه سمة DontDelete لذا فهو يُرجع falsedelete unifiedProperty; / 42 ليس خاصية لذا فهو يُرجع صحيحًا. ستطرح بعض التطبيقات استثناءً (ينتهك معيار ECMAScript) var x = 24;delete x++; // truex;