خاصية عدم الحذف لكائنات جافا سكريبت
-
12-11-2019 - |
سؤال
وفقًا لمواصفات EcmaScript، لا يمكن حذف بعض خصائص الكائنات بسبب المعلمة الداخلية DontDelete.على سبيل المثال :
var y = 5
لا ينبغي أن تكون قابلة للحذف.ولكن مما تمكنت من التحقق منه - إنه كذلك.
إليك الرابط في مركز مطوري Mozilla:https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/delete
أي أفكار لماذا لا يعمل هذا كما ينبغي؟
المحلول
في بعض الأحيان عليك التحقق مما تقرأه.لا يوجد DontDelete
المعلمة الداخلية في مواصفات ECMA (262، الطبعة 5).ربما [Configurable
] والمقصود الملكية؟ال delete
لا يعمل عامل التشغيل على المتغيرات أو الوظائف، بل يعمل على خصائص الكائن:
var y=5,
z = {y:5};
delete y;
delete z.y;
alert(y); //=> 5
alert(z.y); //=> undefined
من جوابي هذا هذا سؤال ظهرت، وإجابة ممتازة من T.J.حشد.
نصائح أخرى
وفقًا للجدول ES5 17:
كريتيموتابلبيندينج (ن، د)إنشاء ملزمة جديدة قابلة للتغيير في سجل البيئة.قيمة السلسلة N هي نص الاسم المربوطة.إذا كانت الوسيطة المنطقية الاختيارية D صحيحة ، فقد يتم حذف الربط لاحقًا.
وفي 10.5 إنشاء مثيل ملزم للإعلان
- لكل variableClaration و variableClarationNoin d في الكود ، في ترتيب نص المصدر Do [...] II.Call's Env's SetMutableBinding طريقة الخرسانة التي تمر DN ، غير محددة ، وصارمة كحجيلات.
وهو ما يقول لي أن المتغيرات المعلنة لا ينبغي أن تكون قابلة للحذف.في الكود العام، الكائن العام هو كائن التنشيط وهو المتغير obejct، لذلك لا ينبغي أن تكون العناصر العالمية المعلنة قابلة للحذف.وبالطبع قد لا تلتزم المتصفحات بذلك...
var y = 5
alert(delete (y));
يعرض خطأ شنيع.وبعد ذلك لا يمكن حذفه.