لا يتم استخدام حذف المشغل بشكل شائع في JavaScript ، ولكن خصائصه غريبة جدًا بالفعل.
1. حذف خصائص الكائن ، الرمز:
نسخة الكود كما يلي:
var o = {
ج: 1 ،
ب: 2
} ؛
حذف الزراعة العضوية ؛
تنبيه (OA) ؛ // غير محدد
لذلك ، هل تم حذف سمة الكائن أو قيمة السمة للكائن؟ بدأت أعتقد أن الحذف يجب أن يكون القيمة ، لأن النتيجة غير محددة ولا يوجد خطأ. لكن في الواقع ، رأيي خاطئ ، أعط مثالاً:
نسخة الكود كما يلي:
var o = {} ؛
var a = {
Pro: "Zhenn"
} ؛
OC = A ؛
حذف OC ؛ // حذف خاصية كائن o
console.log (OC) ؛ // غير محدد
console.log (A.Pro) ؛ // Zhenn
من خلال الكود أعلاه ، ليس من الصعب أن نرى أنه بعد حذف OC ، لا يتم حذف القيمة التي يتم الإشارة إليها بواسطة OC ، أي الكائن A لا يزال موجودًا ، وإلا يجب ألا يكون A.Pro قادرًا على تمرير مستوى التجميع. عند الحديث عن هذا ، يمكن فهم أن الحذف يحذف سمات الكائن بهذه الطريقة ، وهو ما يعادل فعليًا حذف مرجع إلى قيمة السمة في الكائن ، لكن هذه القيمة لا تزال في مكدس الكائن!
2. لتشغيل المصفوفة ، انظر إلى الكود أولاً:
نسخة الكود كما يلي:
var arr = [1،2،3] ؛
حذف ARR [2] ؛
console.log (arr.length) ؛ // 3
console.log (arr) ؛ // [1،2 ، غير محدد]
لقد ثبت مرة أخرى أن DELETE لا يحذف العنصر حقًا ، بل يحذف فقط قيمة المفتاح المقابلة للعنصر. من أجل زيادة فهم جوهر الحذف ، قارنه مع طريقة البوب في Array. على النحو التالي:
نسخة الكود كما يلي:
var arr = [1،2،3] ؛
arr.pop () ؛
console.log (arr) ؛ // [1،2]
console.log (arr.length) // 2
يجب الكشف عن الحقيقة الآن.
3. من السهل فهم العمليات المذكورة أعلاه على الكائنات والمصفوفات ، لكن من الصعب فهم العمليات على المتغيرات. الرمز كما يلي:
نسخة الكود كما يلي:
var a = 1 ؛
حذف A ؛
تنبيه (أ) ؛ // 1
دالة fn () {return 42 ؛ }
حذف FN ؛
تنبيه (fn ()) ؛ // 42
ب = 2 ؛
حذف ب ؛
تنبيه (ب) ؛ // ب لم يتم تعريفه ؛
من الصعب شرح. إنه أيضًا متغير عالمي ، ولكن لا يمكن حذف المتغير B المعلن مع VAR. من المستحيل القول إن الحذف غريب جدًا. في التفسير المقدم من ECMA ، يعني فقط أن المتغيرات المعلنة من خلال VAR والوظائف المعلنة من خلال الوظيفة لها ميزة Dontdelete ولا يمكن حذفها.