نمط إجباري JavaScript
- الصفحة السابقة JS Hoisting
- الصفحة التالية كلمة المفتاح JS this
"use strict";
يحدد أن يجب تنفيذ كود JavaScript بنمط "إجباري".
"use strict" تعليم
"use strict"
هو تعليم جديد في JavaScript 1.8.5 (إصدار ECMAScript 5).
إنه ليس جملة، بل تعبير نصي، ويقوم إصدارات JavaScript الأقدم بتخطيها.
"use strict";
يهدف إلى إشارة إلى أن كود JavaScript يجب تنفيذه بنمط "إجباري".
في النمط الإجباري، لا يمكنك، على سبيل المثال، استخدام متغير لم يتم إعلانه.
المراكز التالية من المتصفحات تدعم النمط الإجباري:
- من إصدار 10 من IE فما فوق
- من إصدار 4 من Firefox فما فوق
- من إصدار 13 من Chrome فما فوق
- من إصدار 5.1 من Safari فما فوق
- من إصدار 12 من Opera فما فوق
إعلان النمط الإجباري
من خلال إضافة "use strict";
لإعلان النمط الإجباري.
في بداية السكربت، يمكن إعلانه بامتداد عالمي (كل الكود في السكربت يتم تنفيذه بنمط إجباري):
مثال
"use strict"; x = 3.14; // سيؤدي هذا إلى حدوث خطأ، لأن x لم يتم إعلانه بعد
مثال
"use strict"; myFunction(); function myFunction() { y = 3.14; // سيؤدي هذا إلى حدوث خطأ، لأن y لم يتم إعلانه بعد }
في الدالة، يمكن إعلان النمط الإجباري بامتداد محلي (فقط يتم تنفيذ الكود في الدالة بنمط إجباري):
x = 3.14; // لن يحدث خطأ هذا myFunction(); function myFunction() { "use strict"; y = 3.14; // سيؤدي هذا إلى حدوث خطأ }
"use strict";
تم تصميم جملة النمط الإجباري لتكون متوافقة مع إصدارات JavaScript الأقدم.
تجميع النصوص العددية في برمجة JavaScript (مثل 4+5) أو النصوص النصية ("Bill Gates") لا يسبب أي تأثير سلبي. إنه سيتم تجميعه كمتغير غير موجود ثم التلاشي.
كل "use strict";
سيؤثر فقط على المبرمجين الذين يفهمون معنى هذا.
لماذا نستخدم الوضع الصارم؟
يجعل الوضع الصارم من السهل كتابة JavaScript "آمن".
يحول الوضع الصارم الجملة التي كانت مقبولة سابقاً إلى أخطاء حقيقية.
على سبيل المثال، في JavaScript العادي، إذا تم تسمية المتغير بشكل غير صحيح، سيتم إنشاء متغير عالمي جديد. في الوضع الصارم، سيؤدي هذا إلى رفع خطأ، وبالتالي لن يكون من الممكن إنشاء متغيرات عالمية بشكل غير مقصود.
في JavaScript العادي، إذا تم تعيين قيمة لخاصية غير القابلة للكتابة، لن يتعلم المطور أي رد فعل خطأ.
في الوضع الصارم، تعيين قيمة لخاصية غير القابلة للكتابة، أو الخاصية القابلة فقط، أو الخاصية غير موجودة، أو تعيين قيمة لغير المتغير أو الجسم، سيؤدي إلى رفع خطأ.
الأشياء التي لا يسمح بها في الوضع الصارم
استخدام المتغير دون إعلانه غير مسموح:
"use strict"; x = 3.14; // سيؤدي هذا إلى خطأ
الجسم هو متغير
استخدام الجسم دون إعلانه غير مسموح:
"use strict"; x = {p1:10, p2:20}; // سيؤدي هذا إلى خطأ
حذف المتغير (أو الجسم) غير مسموح:
"use strict"; var x = 3.14; delete x; // سيؤدي هذا إلى خطأ
حذف الدالة غير مسموح:
"use strict"; function x(p1, p2) {}; delete x; // سيؤدي هذا إلى خطأ
الاسم المكرر للمعامل غير مسموح:
"use strict"; function x(p1, p1) {}; // سيؤدي هذا إلى خطأ
النصوص الثمانية غير مسموح:
"use strict"; var x = 010; // سيؤدي هذا إلى خطأ
الرموز المتبادلة غير مسموح:
"use strict"; var x = \010; // سيؤدي هذا إلى خطأ
كتابة الخاصية القابلة فقط غير مسموح:
"use strict"; var obj = {}; Object.defineProperty(obj, "x", {value:0, writable:false}); obj.x = 3.14; // سيؤدي هذا إلى خطأ
كتابة الخاصية القابلة فقط غير مسموح:
"use strict"; var obj = {get x() {return 0} }; obj.x = 3.14; // سيؤدي هذا إلى خطأ
حذف الخاصية غير القابلة للحذف غير مسموح:
"use strict"; delete Object.prototype; // سيؤدي هذا إلى خطأ
السلسلة "eval" لا يمكن استخدامها كمتغير:
"use strict"; var eval = 3.14; // سيؤدي هذا إلى خطأ
السلسلة "arguments" لا يمكن استخدامها كمتغير:
"use strict"; var arguments = 3.14; // سيؤدي إلى خطأ
with
التعليمات غير مسموح بها:
"use strict"; with (Math){x = cos(2)}; // سيؤدي إلى خطأ
لا يسمح بأخذ العناصر في الاعتبار لأسباب أمنية eval()
لإنشاء متغيرات في نطاق التشغيل الذي تم فيه النداء:
"use strict"; eval ("var x = 2"); alert (x); // سيؤدي إلى خطأ
في إجراءات النداء مثل f()، القيمة الخاصة بـ this هي العنصر العالمي. في الموديل التقييدية، أصبح الآن undefined
.
ضمان المستقبل
لا يسمح باستخدام الكلمات المفتاحية المخصصة للمستقبل في��ود الموديل. وهي:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
"use strict"; var public = 1500; // سيؤدي إلى خطأ
تحذير
"use strict"
تعليمات يمكن استخدامها فقط في سكريبت أو دالةالبدايةتم التعرف عليه.
- الصفحة السابقة JS Hoisting
- الصفحة التالية كلمة المفتاح JS this