Programming Basics SQL HTML CSS JavaScript Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Learn Typing

جافاسكربتالوضع الصارم

  • مفهوم الوضع الصارم
  • تفعيل الوضع الصارم
  • قواعد الوضع الصارم
  • فوائد الوضع الصارم

مفهوم الوضع الصارم

إبتداءاً من الإصدار ES5 أصبح بالإمكان تفعيل الوضع الصارم ( Strict Mode ) مما يجعل كتابة الكود أكثر أماناً.

الوضع الصارم يجعل مفسر الكود يظهر الأخطاء المخفية التي قد تحدث بسبب عدم مراعاة القواعد الآمنة في كتابة الكود، فعلى سبيل المثال يظهر خطأ في حال استخدام كلمة مفتاحية كإسم لمتغير، في حال تعريف متغير بدون تحديد ما هو نوعه، في حال التعديل على قيم خاصية في الكائن لا يفترض تغييرها و غيرها من الأمور التي لا يفترض القيام بها.

في هذا الدرس ستتعلم كيفية تفعيل الوضع الصارم و ستتعرف على جميع القواعد التي يجب اتباعها عند كتابة الكود في حال تفعيله.

تفعيل الوضع الصارم

استخدام الوضع الصارم يتم بكل بساطة من خلال وضع التعبير النصي 'use strict' على سطر منفرد في أعلى النطاق المراد تفعيله فيه. فلو أردت تفعيله على كل السكربت سيكون عليك وضعها في بدايته و عندها سيتم تطبيقها على جميع الأوامر الموضوعة من بعده.

الأخطاء التي قد تحدث عند تفعيل الوضع الصارم تظهر في الكونسول و ليس في الصفحة و هي تجعل مفسر الكود لا يتابع تنفيذ الأوامر المتبقية في الكود.


تفعيل الوضع الصارم على السكربت

في المثال التالي قمنا بتفعيل الوضع الصارم في أعلى السكربت حتى يتم تطبيقه على كامل الكود.

مفسر الكود سيظهر خطأ عندما يحاول تعريف المتغير y حيث أنه لم يتم تعريفه باستخدام إحدى الكلمات المفتاحية var أو let أو const المخصصة لتعريف المتغير.

مثال

'use strict';
let x = 10; // تعريف المتغير بهذا الشكل مقبول
document.write('x = ' + x + '<br>');
y = 20; // تعريف المتغير بهذا الشكل غير مقبول
document.write('y = ' + y);
'use strict'; let x = 10; // تعريف المتغير بهذا الشكل مقبول document.write('x = ' + x + '<br>'); y = 20; // تعريف المتغير بهذا الشكل غير مقبول document.write('y = ' + y);

النتيجة في الصفحة

x = 10

الخطأ في الكونسول

Uncaught ReferenceError: assignment to undeclared variable 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();
x = 10; // تعريف المتغير بهذا الشكل مقبول document.write('x = ' + x + '<br>'); function demo() { 'use strict'; y = 20; // تعريف المتغير بهذا الشكل غير مقبول document.write('y = ' + y); } demo();

النتيجة في الصفحة

x = 10

الخطأ في الكونسول

Uncaught ReferenceError: assignment to undeclared variable y
جرب الكود

قواعد الوضع الصارم

1- ممنوع تعريف المتغير، المصفوفة، الكائن بدون التصريح عن نوعهم باستخدام إحدى الكلمات المفتاحية var أو let أو const.

مثال

'use strict';
// تعريف المتغير كما يلي غير مقبول
num = 10;
// تعريف المصفوفة كما يلي غير مقبول
arr = [1, 2, 3, 4, 5];
// تعريف الكائن كما يلي غير مقبول
obj = {name: 'Mhamad', salary: 2500};
'use strict'; // تعريف المتغير كما يلي غير مقبول num = 10; // تعريف المصفوفة كما يلي غير مقبول arr = [1, 2, 3, 4, 5]; // تعريف الكائن كما يلي غير مقبول obj = {name: 'Mhamad', salary: 2500};

2- ممنوع حذف متغير، دالة، مصفوفة أو كائن كما هو بواسطة الكلمة المفتاحية delete.

مثال

'use strict';
let arr = [1, 2, 3, 4, 5];
let obj = {name: 'Mhamad', salary: 2500};
delete arr[2]; // حذف عنصر محدد من المصفوفة مقبول
delete obj.salary; // حذف خاصية محددة من الكائن مقبول
delete arr; // حذف المصفوفة كما هي غير مقبول
delete obj; // حذف الكائن كما هو غير مقبول
'use strict'; let arr = [1, 2, 3, 4, 5]; let obj = {name: 'Mhamad', salary: 2500}; delete arr[2]; // حذف عنصر محدد من المصفوفة مقبول delete obj.salary; // حذف خاصية محددة من الكائن مقبول delete arr; // حذف المصفوفة كما هي غير مقبول delete obj; // حذف الكائن كما هو غير مقبول

3- ممنوع استخدام نفس الإسم لأكثر من باراميتر في الدالة.

مثال

'use strict';
function demo(param1, param2, param2) {
// استخدام نفس الإسم لأكثر من باراميتر غير مقبول
}
'use strict'; function demo(param1, param2, param2) { // استخدام نفس الإسم لأكثر من باراميتر غير مقبول }

4- لا يجب استخدام الكلمة المفتاحية this في الدالة الغير موجودة ضمن كلاس، و في حال استخدامها فإن قيمتها ستكون undefined مما يعني أنها لا تشير لأي شيء موجود.

مثال

'use strict';
function demo() {
console.log(this); // في الدالة this لا يفترض استخدام
}
'use strict'; function demo() { console.log(this); // في الدالة this لا يفترض استخدام }

5- ممنوع استخدام الكلمات المحجوزة في اللغة كأسماء لمتغيرات، بل إنه ممنوع حتى استخدام الكلمات التي من المتوقع إضافتها مستقبلاً في جافاسكربت.

مثال

'use strict';
// كإسم لمتغير ممنوع public استخدام الكلمة المفتاحية
var public = 10;
'use strict'; // كإسم لمتغير ممنوع public استخدام الكلمة المفتاحية var public = 10;

6- ممنوع إضافة صفر في بداية العدد حتى يتم تعريفه بنظام العدد الثماني ( Octal Number ).

مثال

'use strict';
// ممنوع استخدام نظام العدد الثماني كقيمة
var num = 010;
'use strict'; // ممنوع استخدام نظام العدد الثماني كقيمة var num = 010;

7- ممنوع تغيير قيمة خاصية في الكائن إذا كان عليها المؤشر writable: false الذي يمنع ذلك.

مثال

'use strict';
// هنا قمنا بتعريف كائن فارغ
let user = {};
// مع تحديد قيمتها و جعلها غير قابلة للتغير user للكائن name هنا أضفنا خاصية إسمها
Object.defineProperty(user, 'name', { value: 'Mhamad', writable: false });
// كما يلي لأنه عليها مؤشر يفيد بأنه ممنوع تغييرها name ممنوع تغيير قيمة الخاصية
user.name = 'Ramy';
'use strict'; // هنا قمنا بتعريف كائن فارغ let user = {}; // مع تحديد قيمتها و جعلها غير قابلة للتغير user للكائن name هنا أضفنا خاصية إسمها Object.defineProperty(user, 'name', { value: 'Mhamad', writable: false }); // كما يلي لأنه عليها مؤشر يفيد بأنه ممنوع تغييرها name ممنوع تغيير قيمة الخاصية user.name = 'Ramy';

فوائد الوضع الصارم

إستخدام الوضع الصارم يفرض الإلتزام بقواعد كتابة الكود و هذا الأمر يجنب المبرمج الوقوع في الأخطاء التي قد لا يلاحظها في الكود. و بالإضافة لما سبق فإنه يجعل الكود يتناسب مع المميزات الحديثة المتوقع إضافتها في الإصدارات المستقبلية من جافاسكربت.

الكلمات التالية ممنوع استخدامها كأسماء للمتغيرات لأنه من المتوقع تضمينها في الإصدارات المستقبلية:

implements - interface - package - private - protected - public - yield - arguments