جافاسكربتالوضع الصارم
- مفهوم الوضع الصارم
- تفعيل الوضع الصارم
- قواعد الوضع الصارم
- فوائد الوضع الصارم
مفهوم الوضع الصارم
إبتداءاً من الإصدار ES5 أصبح بالإمكان تفعيل الوضع الصارم ( Strict Mode ) مما يجعل كتابة الكود أكثر أماناً.
الوضع الصارم يجعل مفسر الكود يظهر الأخطاء المخفية التي قد تحدث بسبب عدم مراعاة القواعد الآمنة في كتابة الكود، فعلى سبيل المثال يظهر خطأ في حال استخدام كلمة مفتاحية كإسم لمتغير، في حال تعريف متغير بدون تحديد ما هو نوعه، في حال التعديل على قيم خاصية في الكائن لا يفترض تغييرها و غيرها من الأمور التي لا يفترض القيام بها.
في هذا الدرس ستتعلم كيفية تفعيل الوضع الصارم و ستتعرف على جميع القواعد التي يجب اتباعها عند كتابة الكود في حال تفعيله.
تفعيل الوضع الصارم
استخدام الوضع الصارم يتم بكل بساطة من خلال وضع التعبير النصي على سطر منفرد في أعلى النطاق المراد تفعيله فيه. فلو أردت تفعيله على كل السكربت سيكون عليك وضعها في بدايته و عندها سيتم تطبيقها على جميع الأوامر الموضوعة من بعده.
الأخطاء التي قد تحدث عند تفعيل الوضع الصارم تظهر في الكونسول و ليس في الصفحة و هي تجعل مفسر الكود لا يتابع تنفيذ الأوامر المتبقية في الكود.
تفعيل الوضع الصارم على السكربت
في المثال التالي قمنا بتفعيل الوضع الصارم في أعلى السكربت حتى يتم تطبيقه على كامل الكود.
مفسر الكود سيظهر خطأ عندما يحاول تعريف المتغير y
حيث أنه لم يتم تعريفه باستخدام إحدى الكلمات المفتاحية var
أو let
أو const
المخصصة لتعريف المتغير.
مثال
let x = 10; // تعريف المتغير بهذا الشكل مقبول document.write('x = ' + x + '<br>'); y = 20; // تعريف المتغير بهذا الشكل غير مقبول document.write('y = ' + y);;
النتيجة في الصفحة
الخطأ في الكونسول
تفعيل الوضع الصارم ضمن نطاق محدد
في المثال التالي قمنا بتفعيل الوضع الصارم ضمن حدود الدالة demo()
فقط مما يعني أن الكود الخارجي لا يخضع لهذا الوضع.
مفسر الكود لن يظهر خطأ عندما يحاول تعريف المتغير x
فهو لا يخضع للوضع الصارم، لكنه سيظهر خطأ عند تعريف المتغير y
حيث أنه يخضع للوضع الصارم و لم يتم تعريفه باستخدام إحدى الكلمات المفتاحية var
أو let
أو const
المخصصة لتعريف المتغير.
مثال
x = 10; // تعريف المتغير بهذا الشكل مقبول document.write('x = ' + x + '<br>'); function demo() { 'use strict'; y = 20; // تعريف المتغير بهذا الشكل غير مقبول document.write('y = ' + y); } demo();
النتيجة في الصفحة
الخطأ في الكونسول
قواعد الوضع الصارم
1- ممنوع تعريف المتغير، المصفوفة، الكائن بدون التصريح عن نوعهم باستخدام إحدى الكلمات المفتاحية var
أو let
أو const
.
مثال
// تعريف المتغير كما يلي غير مقبول num = 10; // تعريف المصفوفة كما يلي غير مقبول arr = [1, 2, 3, 4, 5]; // تعريف الكائن كما يلي غير مقبول obj = {name: 'Mhamad', salary: 2500};;
2- ممنوع حذف متغير، دالة، مصفوفة أو كائن كما هو بواسطة الكلمة المفتاحية delete
.
مثال
let arr = [1, 2, 3, 4, 5]; let obj = {name: 'Mhamad', salary: 2500}; delete arr[2]; // حذف عنصر محدد من المصفوفة مقبول delete obj.salary; // حذف خاصية محددة من الكائن مقبول delete arr; // حذف المصفوفة كما هي غير مقبول delete obj; // حذف الكائن كما هو غير مقبول;
3- ممنوع استخدام نفس الإسم لأكثر من باراميتر في الدالة.
مثال
function demo(param1, param2, param2) { // استخدام نفس الإسم لأكثر من باراميتر غير مقبول };
4- لا يجب استخدام الكلمة المفتاحية this
في الدالة الغير موجودة ضمن كلاس، و في حال استخدامها فإن قيمتها ستكون undefined
مما يعني أنها لا تشير لأي شيء موجود.
مثال
function demo() { console.log(this); // في الدالة this لا يفترض استخدام };
5- ممنوع استخدام الكلمات المحجوزة في اللغة كأسماء لمتغيرات، بل إنه ممنوع حتى استخدام الكلمات التي من المتوقع إضافتها مستقبلاً في جافاسكربت.
مثال
// كإسم لمتغير ممنوع public استخدام الكلمة المفتاحية var public = 10;;
6- ممنوع إضافة صفر في بداية العدد حتى يتم تعريفه بنظام العدد الثماني ( Octal Number ).
مثال
// ممنوع استخدام نظام العدد الثماني كقيمة var num = 010;;
7- ممنوع تغيير قيمة خاصية في الكائن إذا كان عليها المؤشر writable: false
الذي يمنع ذلك.
مثال
// هنا قمنا بتعريف كائن فارغ let user = {}; // مع تحديد قيمتها و جعلها غير قابلة للتغير user للكائن name هنا أضفنا خاصية إسمها Object.defineProperty(user, 'name', { value: 'Mhamad', writable: false }); // كما يلي لأنه عليها مؤشر يفيد بأنه ممنوع تغييرها name ممنوع تغيير قيمة الخاصية user.name = 'Ramy';;
فوائد الوضع الصارم
إستخدام الوضع الصارم يفرض الإلتزام بقواعد كتابة الكود و هذا الأمر يجنب المبرمج الوقوع في الأخطاء التي قد لا يلاحظها في الكود. و بالإضافة لما سبق فإنه يجعل الكود يتناسب مع المميزات الحديثة المتوقع إضافتها في الإصدارات المستقبلية من جافاسكربت.
الكلمات التالية ممنوع استخدامها كأسماء للمتغيرات لأنه من المتوقع تضمينها في الإصدارات المستقبلية:
implements
- interface
- package
- private
- protected
- public
- yield
- arguments