توفر لك هذه المقالة المعرفة ذات الصلة بجافا سكريبت، والتي تقدم بشكل أساسي المشكلات المتعلقة بالوضع الصارم، وهو وضع جافا سكريبت مقيد، مما يجعل الكود ينفصل ضمنيًا عن "الوضع الكسول"، دعنا نلقي نظرة. في ذلك، وآمل أن يكون مفيدا للجميع.
[توصيات ذات صلة: فيديو تعليمي لجافا سكريبت، واجهة الويب الأمامية]
في معيار ECMAScript5، اقترحت JavaScript مفهوم الوضع الصارم:
من السهل فهم الوضع الصارم، وهو وضع جافا سكريبت مقيد، مما يجعل الكود ينفصل ضمنيًا عن "الوضع البطيء".
عندما يكتشف متصفح يدعم الوضع الصارم الوضع الصارم في التعليمات البرمجية، فإنه سيكتشف التعليمات البرمجية وينفذها بطريقة أكثر صرامة.
يفرض الوضع الصارم بعض القيود على دلالات JavaScript العادية:
يعمل الوضع الصارم على إزالة بعض الأخطاء الصامتة الأصلية عن طريق التخلص منها .
يسمح الوضع الصارم لمحرك JS بإجراء المزيد من التحسينات عند تنفيذ التعليمات البرمجية (دون الحاجة إلى التعامل مع بعض تركيبات الجملة الخاصة).
يعمل الوضع الصارم على تعطيل بعض تركيبات الجملة التي قد يتم تعريفها في الإصدارات المستقبلية من ECMAScript.
فكيف لتمكين الوضع الصارم؟ يدعم الوضع الصارم الترحيل الحبيبي:
يمكن أن يدعم تشغيل الوضع الصارم في ملفات js؛
كما أنه يدعم تشغيل الوضع الصارم لوظيفة معينة؛
تم تصميم جافا سكريبت لتكون أسهل للمطورين المبتدئين في الاستخدام، لذلك في بعض الأحيان تحتوي على بناء جملة غير صحيح، ولكن لا أعتقد أنه يمكن تحليلها بشكل طبيعي؛
ومع ذلك، فإن هذه الطريقة قد تترك مخاطر أمنية؛
في الوضع الصارم، سيتم التعامل مع هذا النوع من المعاملات على أنها خطأ بحيث يمكن اكتشافها وتصحيحها بسرعة؛
فيما يلي ملخص لبعض القيود الشائعة:
هناك طريقتان لإنشاء متغيرات عمومية عن طريق الخطأ:
قم بإعلان المتغيرات العامة بشكل مباشر دون استخدام الكلمات الأساسية
إذا قمت بتعريف متغير دون استخدام الكلمات الأساسية داخل دالة، فسيتم ترقية الدالة إلى متغير عام بشكل افتراضي. رمز المثال هو كما يلي:
"استخدام صارم" // تعطيل الإنشاء العرضي للمتغيرات العامة message = 'الإنشاء العرضي للمتغيرات العامة' console.log(message) // رسالة الخطأ هي: خطأ مرجعي لم يتم اكتشافه: لم يتم تعريف الرسالة وظيفة فو () { العمر=20 console.log(العمر) } foo() // خطأ مرجعي: العمر غير محدد
رمز العينة كما يلي:
// تمكين الوضع الصارم وتحويل المشكلة مباشرة إلى خطأ "استخدام صارم" const v = 100;//(تعريف الثابت) v = 1.14; // إعادة تعيين القيمة (للمتغير) console.log(v); // خطأ TypeError: تعيين لمتغير ثابت.
في الوضع الصارم، لا يمكنك استخدام عامل إلغاء التحديد على المتغيرات.
// تشغيل الوضع الصارم "استخدام صارم" فار الخامس = 100؛ حذف v;// في الوضع غير الصارم: هذا فشل صامت، ولا يتم الإبلاغ عن خطأ ولا يتم حذف المتغير v. console.log(v);//100 // بعد تشغيل الوضع الصارم، يتم الإبلاغ عن خطأ بدلاً من حذف معرف غير مؤهل في الوضع الصارم.
في الوضع المتشدد، يكون لاستخدام الكلمة الأساسية للحذف للمصفوفات وسمات الطريقة نفس التأثير.
// تشغيل الوضع الصارم "استخدام صارم" // 1. احذف محتوى المصفوفة في الوضع الصارم var arr = [1,2,3,4] حذف arr[0]; console.log(arr);//[ <1 عنصر فارغ>, 2, 3, 4 ] // 2. سمات وظيفة الحذف في الوضع الصارم var obj = { الاسم: "الرجل الخنزير" } حذف obj.name؛ console.log(obj.name)//غير محدد
رمز العينة كما يلي:
"استخدام صارم" // غير مسموح بالوظائف التي لها نفس اسم المعلمة function foo2 (x, y, x) { console.log(x, y, x) } foo2(10, 20, 30) // SyntaxError: اسم المعلمة المكرر غير مسموح به في هذا السياق
رمز العينة كما يلي:
// التنسيق الثماني الأصلي var num1 = 0123 غير مسموح به var num2 = 0o123 // يمكن كتابته بهذا التنسيق الثماني var num3 = 0x123 // يمكن كتابته بهذا التنسيق كنظام سداسي عشري var num4 = 0b100 // يمكن كتابته بهذا التنسيق كنظام ثنائي console.log(num1) // خطأ في SyntaxError: غير مسموح بالقيم الحرفية الثمانية في الوضع الصارم. console.log(num2, num3, num4) // 83 291 4
رمز العينة كما يلي:
"استخدام صارم" var message = 'Hello World'; var obj = { الاسم: 'jam'، العمر: 20 } // يمكن أن تشكل عبارة with نطاقًا خاصًا بها. عند طباعة العمر في عبارة with، سيتم إخراج سمة العمر في كائن obj، ومع ذلك، عند طباعة رسالة السمة غير الموجودة في عبارة with، سيتم طباعتها مستوى واحد إلى النطاق الخارجي. مستوى واحد للعثور على الدالة foo () {. مع (الكائن) { console.log(العمر) console.log(رسالة) } console.log(رسالة) } foo() // SyntaxError: قد لا يتضمن كود الوضع الصارم عبارة with
رمز العينة كما يلي:
var jsString = "var message = 'hello World';console.log(message)" eval(jsString) // إخراج مرحباً بالعالم console.log(message) // رسالة الخطأ هي: خطأ مرجعي: لم يتم تعريف الرسالة
开启严格模式eval函数不会向上引用变量所以全局作用域就没有message这个变量所以会报错
رمز العينة كما يلي:
"استخدام صارم" // في الوضع الصارم، ستشير وظيفة التنفيذ الذاتي (الربط الافتراضي) إلى غير محدد، وفي الوضع غير الصارم، ستشير إلى النافذة وظيفة فو () { console.log(هذا) } foo() // غير محدد