1. المتغيرات
عندما يتعلق الأمر بمشغل الحذف في JavaScript ، يجب علينا أولاً معرفة العلاقة بين المتغيرات والسمات في JavaScript.
في JavaScript ، تكون العلاقة بين المتغيرات وسمات الكائن خفية للغاية ، ويمكن أن تكون مساهمة عدة مرات ، لأن JavaScript ستنشئ كائنًا عالميًا قبل تنفيذ البرنامج النصي ، وهو كائن نافذة في المتصفح. جميع المتغيرات العالمية هي سمات لهذا الكائن العالمي. عند تنفيذ الوظيفة ، سيتم إنشاء كائن تنشيط أيضًا. جميع المتغيرات المحلية هي سمات كائن التنشيط هذا. يمكنك التعرف على نطاق JavaScript والإغلاق هذه.
نسخة الكود كما يلي:
// لا يمكن حذف السمات المعلنة في النموذج الأولي
var global = 1 ؛
this.global ؛ // 1 ، يمكنك الوصول إلى الكائنات العالمية من خلال هذا
this.global2 = 2 ؛
Global2 ؛ // 12
وظيفة foo () {
var local = 36 ؛
// ومع ذلك ، لا يمكن الوصول إلى التنشيط مباشرة.
// لذلك ، لا يمكن الوصول إلى المتغير المحلي من خلال foo.local
}
يبدو أن المتغيرات تعادل خصائص الكائن ، ولكن في الواقع ، فهي ليست هي نفسها ، على الأقل بالنسبة لمشغل الحذف. أفهم أنه يجب إكمال الإعلانات المتغيرة من خلال عبارات VAR. المتغيرات العالمية التي لم يتم الإعلان عنها من خلال عبارات VAR هي خصائص كائنات النوافذ. هذا يجعل من السهل فهم العلاقة بين المتغيرات وخصائص الكائن.
2. حذف المشغل
يتم استخدام مشغل الحذف لحذف خصائص الكائن. للحصول على قيم النوع المرجعي ، يحذف أيضًا خصائص الكائن نفسها ، ولا يحذف الكائن الذي أشار إليه الخاصية. إذا كان لديك أي أسئلة ، فيمكنك النظر في قيم النوع الأساسي ونوع المرجع ، أو اختبار الكود التالي:
نسخة الكود كما يلي:
var o = {} ؛
var a = {x: 10} ؛
الزراعة العضوية = أ ؛
حذف الزراعة العضوية ؛ // تم حذف سمة الزراعة العضوية
console.log (OA) ؛ // غير محدد
console.log (ax) ؛ // 10 ، لأن كائن {x: 10} لا يزال يشار إليه A ، لذلك لن يتم إعادة تدويره
بالإضافة إلى ذلك ، يمكن أيضًا كتابة Delete OX كحذف O ["X"] ، وتأثير كلاهما متماثل.
3. لا يمكن حذف المتغيرات
المتغيرات التي تم إعلانها بواسطة VAR والوظائف المعلنة حسب الوظيفة لها ميزة Dontdelete ولا يمكن حذفها. المتغيرات العالمية لم يتم الإعلان عنها عبر VAR (خصائص الكائنات العالمية)
نسخة الكود كما يلي:
var global = {
ج: 123 ،
ب: {
ج: 1345
}
} ؛
حذف عالمي ؛ //غير صالح
console.log (عالمي)
OBJ = {
ج: 123
} ؛
حذف OBJ ؛ // حذف المتغيرات العالمية OBJ ، سمة OBJ لكائن النافذة
Console.log (OBJ) ؛ // OBJ غير محدد
4. لا يمكن حذف السمات المعلنة في النموذج الأولي ولا يمكن حذف السمات التي تأتي مع الكائن.
يمكن اعتبار السمات المعلنة في النموذج الأولي النموذجية والسمات التي تأتي مع الكائن (في الواقع ، هذه السمات هي أيضًا في النموذج الأولي) لها خصائص Dontdelete ولا يمكن حذفها. على سبيل المثال
نسخة الكود كما يلي:
// لا يمكن حذف السمات المعلنة في النموذج الأولي
وظيفة OBJ () {
this.x = 1 ؛
}
obj.prototype.x = 2 ؛
var o = new obj () ؛
console.log (OX) ؛ // 1 ، ثور محدد في المنشئ
حذف الثور.
console.log (OX) ؛ // 2 ، OX المحددة في النموذج الأولي ، حتى لو تم تنفيذ OX Delete مرة أخرى ، فلن يتم حذفه.
// لا يمكن حذف السمات التي تأتي مع الكائن
Var Strings = "123456" ؛
console.log (strings.length) ؛ // 6
حذف السلاسل. الطول ؛
console.log (strings.length) ؛ // لا يزال 6
5. عدة استثناءات تحت بيان EVAL
في الكود الذي تم تنفيذه بواسطة eval ، على الرغم من أن المتغيرات التي تم إعلانها بواسطة VAR تنتمي إلى الكائنات العالمية كمتغيرات معلنة VAR العادية ، فإنها لا تحتوي على سمة Dontdelete ويمكن حذفها. ومع ذلك ، فإن المتغيرات المحددة بواسطة VAR في الوظيفة في رمز AVER لم يتم حذفها ولا يمكن حذفها.
نسخة الكود كما يلي: eval ("var x = 42 ؛") ؛
x ؛ // => 42
حذف x ؛
x ؛ // => Referenceerror: X غير محدد
eval ("function f () {return 12 ؛}") ؛
f () ؛ // => 12
حذف F ؛
f () ؛ // => Referenceerror: F غير محدد
// في الكود الذي تم تنفيذه بواسطة eval ، على الرغم من أن المتغير الذي أعلنه VAR ينتمي إلى الكائن العالمي كمتغيرات معلنة VAR العادية ،
// لكن ليس لديهم ميزة Dontdelete ويمكن حذفها.
eval ("(function () {" +
"var x = 42 ؛" +
"حذف x ؛" +
"العودة x ؛" +
"}) () ؛")
// => 42
// المتغير المحدد بواسطة VAR في الوظيفة في رمز EVELS لم يتم حذفه ولا يمكن حذفه.
6. قيمة الإرجاع للحذف
الحذف هو عامل عادي وسيعود صحيحًا أو خطأ. إرجاع خطأ عند وجود خاصية الكائن المحذوف ولديه dondelete ، بطريقة أخرى. إحدى الميزات هنا هي أنه عندما لا تكون سمة الكائن موجودة ، فإنها تُرجع بشكل صحيح ، وبالتالي فإن قيمة الإرجاع ليست مكافئة تمامًا لما إذا كان الحذف ناجحًا أم لا.
نسخة الكود كما يلي:
الوظيفة C () {
this.x = 42 ؛
}
C.Prototype.y = 12 ؛
var o = new c () ؛
حذف الثور. // حقيقي
ثور؛ // غير محدد
"x" في o ؛ // خطأ شنيع
// OX موجود وليس لديه عدم إلغاء ، يعود صحيح
حذف OY ؛ // حقيقي
يا // 12
// o نفسه ليس له سمة OY ، لذلك يعود صحيحًا
// من هنا يمكنك أيضًا رؤية وجود سلسلة النموذج الأولي. تختلف سمات الكائن وسمات النموذج الأولي.
حذف o ؛ // خطأ شنيع
// global.o لديه ميزة dontdelete لذا إرجاع خطأ
حذف غير محدد ؛ // حقيقي
// Global ليس لديه خاصية تسمى غير محدد
حذف 42 ؛ // حقيقي
// 42 ليست خاصية لذا تُرجع صحيحًا. ستلقي بعض التطبيقات استثناءات (تنتهك معيار ecmascript)
var x = 24 ؛
حذف x ++ ؛ // حقيقي
x ؛ // 25
// ما تم حذفه هو قيمة إرجاع X ++ (24) ، وليس خاصية ، لذلك تُرجع صحيحًا