سؤال

وفقًا لمواصفات 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 إنشاء مثيل ملزم للإعلان

  1. لكل variableClaration و variableClarationNoin d في الكود ، في ترتيب نص المصدر Do [...] II.Call's Env's SetMutableBinding طريقة الخرسانة التي تمر DN ، غير محددة ، وصارمة كحجيلات.

وهو ما يقول لي أن المتغيرات المعلنة لا ينبغي أن تكون قابلة للحذف.في الكود العام، الكائن العام هو كائن التنشيط وهو المتغير obejct، لذلك لا ينبغي أن تكون العناصر العالمية المعلنة قابلة للحذف.وبالطبع قد لا تلتزم المتصفحات بذلك...

var y = 5
alert(delete (y));

يعرض خطأ شنيع.وبعد ذلك لا يمكن حذفه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top