ويظل جافاسكوبت من أكثر لغات البرمجة استخداما على الشبكة، مما يخول كل شيء من أشكال تفاعلية بسيطة إلى تطبيقات معقدة ذات صفحة واحدة، حيث تنمو المشاريع في الحجم وتزداد أعضاء الأفرقة، تصبح الحاجة إلى مدونة موثوقة ويمكن التنبؤ بها أمرا بالغ الأهمية، حيث يُستخدم أسلوب جافاسكريب في تطبيقه الصارم للطريقة التي يُدخل بها في إطار نظام إدارة المعلومات الاقتصادية والاجتماعية 5 - الإساءات، ويسمح للمطورين باختيار صيغة مقيّدة.

ما هو (ستيت مودي)؟

طريقة صارمة هي طريقة لاختيار مجموعة فرعية أكثر انضباطاً من جافاسكيبت عندما يكون مُمكّناً، محرك جافاسكريبت يدير الشفرة تحت مجموعة من القيود التي تزيل بعض من اللغة الأكثر عرضة للأخطاء، الفكرة الكامنة وراء ذلك هي تزويد المطورين بتعليقات مُختلفة بشأن المشاكل المحتملة، مثلاً، بطريقة غير معقدة (المسماة بـ "أسلوب صامت"

وقد استحدثت المادة 5 من نظام إدارة المعلومات الاقتصادية في عام 2009 أسلوباً صارماً كوسيلة لتطوير اللغة دون تجاوز التوافق، ويمكن للمطورين أن يختاروا السلوك الجديد الأكثر صرامة بإضافة إلى أعلى نص أو وظيفة، ومنذ ذلك الحين، أصبح الأسلوب الصارم ممارسة موصى بها في العديد من الأدلة المتعلقة بالأسلوب، وهو يطبق تلقائياً في المباني الحديثة لطبقات الـ"جافاسكوربت مثل وحدات التعليم (الرمز/الصادرات)

كيف يمكن أن يكون أسلوب "موقع "إينبل

وتُدرج هذه التوجيهات في بداية النص أو الوظيفة، وهي ليست بياناً وإنما هي عبارة عن مادة تُخبر المحركات بصياغة الرمز اللاحق بطريقة صارمة، ويمكن تطبيقها على نطاقين: على الصعيد العالمي (للملف كامل من النص)، أو على الصعيد المحلي (للمهمة واحدة).

أسلوب متقطع

(ج) تمكيناً لأسلوب صارم لملف كامل من ملف جافاسكيبت أو خطه ] من الغلق، ومكانه كخط أول في النص (قبل أي بيانات أخرى).

// script.js
'use strict';

var x = 10;
console.log(x); // works normally

// Attempting to use undeclared variables throws an error
y = 20; // ReferenceError: y is not defined

وعندما تطبق على الصعيد العالمي، تؤثر الطريقة الصارمة على جميع الرموز في ملف النصوص هذا، وإذا ما رتبت نصوصاً متعددة، فإن النصوص التي تبدأ بـ ستسير بطريقة صارمة، ومن المهم ملاحظة أن النص الدقيق لا يمكن أن يخلط مع الرمز غير المتقيّد في الملف نفسه ما لم تستخدم تحديد مستوى الوظيفة.

أسلوب العمل

ويمكنك أيضاً أن تُمكِّن من وضعية صارمة داخل وظيفة محددة، بحيث تترك بقية النص في حالة من الارتداد، وهذا مفيد عندما تُهاجر تدريجياً قاعدة بيانات أو عندما تريد التحقق الدقيق من بعض المهام فقط.

function strictFunction() {
 'use strict';
 // Inside this function, strict mode applies
 var a = 1;
 b = 2; // ReferenceError: b is not defined
}

function sloppyFunction() {
 // Outside strictFunction, sloppy mode still applies
 c = 3; // creates global variable c
}

أسلوب العمل الصارم ينطبق فقط على رمز المهمة، ليس على أي مهام سرية (ما لم يعلنوا أيضاً ) ولكن من الشائع في الممارسة العملية وضع أسلوب صارم على مستوى الملف لتحقيق الاتساق.

Modules and Classes

ومع ظهور المادة 6 (ES2015)، أدخلت شركة " جافاسكريب " وحدات وفصول، وكلتاهما مصممتان تلقائياً بطريقة صارمة عن طريق التقصير، ولذلك، إذا كتبتي شفرة استخدام /] للضرائب أو حددتي ، فلا حاجة إلى إضافة - مثال مطبق.

// module.js (no 'use strict' needed)
export function add(a, b) {
 // strict mode is active here
 return a + b;
}

// class definition (strict mode active)
class MyClass {
 constructor(value) {
 this.value = value;
 }
}

وهذا الإنفاذ التلقائي يجعل من الشفرة في الوحدات والأصناف أكثر أماناً وأسهل من حيث الجوهر في المنطق.

الفوائد الرئيسية لاستخدام أسلوب صارم

طريقة صارمة تقدم مجموعة من الفوائد التي تحسن بشكل مباشر من نوعية الشفرة، الأمن، وتجربة المطورين، دعونا نفحص كل فائدة بالتفصيل

الوقاية من الاختلالات العالمية

In non-strict mode, assigning a value to an undeclared variable automatically creates a property on the global object (] in browsers, in Node.js]) This can easily happen due to typographical errors or forgotten declarations, polluting the global namespace and causing subtlegs.

// Non-strict: silently creates global variable
function setup() {
 developer = "Alice"; // accidentally global
}

// Strict: throws ReferenceError
function setup() {
 'use strict';
 developer = "Alice"; // ReferenceError: developer is not defined
}

This enforcement forces developers to explicitly declare variables with , , or , reducing scope-related fines.

القضاء على الأخطاء الصامتة

وكثيراً ما يُسامح جافا سكيربت عندما تفشل العمليات الصمت، فعلى سبيل المثال، فإن إسناد الممتلكات القراء فقط (مثل أو الجسم المجمد] لا يؤدي إلا إلى وضع غير لائق، وفي حالة ضيقة، فإن هذه المهام تُلقي . وبالمثل، فإن محاولات حذف الممتلكات غير القابلة للتداول (مثلاً، [الخطأ في الرد: 26])

// Non-strict: assignment silently fails
var obj = Object.freeze({name: "Bob"});
obj.name = "Charlie"; // silently ignored

// Strict: TypeError thrown
'use strict';
var obj = Object.freeze({name: "Bob"});
obj.name = "Charlie"; // TypeError: Cannot assign to read-only property 'name'

منع ازدواج أسماء البارامترات

وفي غير الحالات المعقدة، يمكن أن تكون الوظائف مزدوجة في أسماء البارامترات، مما قد يؤدي إلى سلوك مختلط (آخر طقوس مكررة سابقة) ويمنع هذا الأسلوب، ويرمي في وقته إلى .

// Non-strict: allowed
function sum(a, a, c) {
 return a + a + c; // a equals the second argument passed
}

// Strict: SyntaxError
'use strict';
function sum(a, a, c) { // SyntaxError: Duplicate parameter name not allowed in strict mode
 return a + a + c;
}

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

Restrics the Statement

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

Makes Safer

In non-strict mode, can introduce new variables into the surrounding scope, leading to unpredictable side effects. Strict mode changes the behavior of so that it creates variables only within the eval code itself - they do not leak into the enclosing context. This makes the code easier to reason about and prevents accidental scope pollution.

// Non-strict: eval creates variable in outer scope
var x = 1;
eval("var x = 2;");
console.log(x); // 2

// Strict: eval has its own scope
'use strict';
var x = 1;
eval("var x = 2;");
console.log(x); // 1

المحظورات التي تُعرض على عدد كبير من الليرات

تاريخياً، فسرت (جافاسكريبت) أرقاماً ذات صفر رئيسي (مثلاً، ) على أنها تحتية (القاعدة 8) وكثيراً ما تسبب هذا السلوك في الارتباك والحشرات، لا سيما عندما يتعلق الأمر بقطع الخيوط مثل (010) التي تُصنف كأرقام.

// Non-strict: 010 means octal 8
console.log(010); // 8

// Strict: SyntaxError
'use strict';
console.log(010); // SyntaxError: Octal literals are not allowed in strict mode

Disallows Deleting Plain Variables

In non-strict mode, you can attempt to delete variables or function declarations, but the operation silently fails (]] returns ). Strict mode throws a if you try to delete a plain change, function, or function parameter. This prevent accidental attempts to delete things that cannot be removeder, and clarifies.

// Non-strict: attempt silently fails
var a = 1;
delete a; // false; a still exists

// Strict: SyntaxError
'use strict';
var a = 1;
delete a; // SyntaxError: Delete of an unqualified identifier in strict mode

التحسينات الإضافية في مجالي الأمن والأداء

وبالإضافة إلى القيود المحددة، فإن الطريقة الصارمة تمكن محركات جافاسكوريبت من أداء بعض التعظيمات التي تكون مستحيلة من غير ذلك، ولأن الطريقة الصارمة تقضي على بعض السلوكيات الدينامية (مثل بيان ] والعالمات الضمني)، يمكن للمحرك أن يُتوقع على نحو أفضل كيف ستُستخدم المتغيرات، مما يؤدي إلى سرعة التنفيذ في بعض الحالات، علاوة على ذلك، فإن الطريقة الصارمة لا تسمح بفرض قيود على الممتلكات .

أمثلة عملية على أسلوب العمل الصارم

لتدعيم التفاهم، لنعبر سلسلة من الأمثلة التي تتناقض مع أسلوب الارتباك الصارم، هذه تظهر أنّ أسلوب التغذية المرتدة الصارمة الفوري ينصّ على ذلك.

المقتطف 1: تعيينات غير معلنة

// sloppy.js
function userInfo() {
 name = "John"; // silently creates global 'name'
}
userInfo();
console.log(window.name); // "John" (in browsers)

// strict.js
'use strict';
function userInfo() {
 name = "John"; // ReferenceError: name is not defined
}
userInfo();

وبدون أسلوب صارم، يمكن لبضعة أشكال بسيطة مثل ] بدلاً من أن يلوث النطاق العالمي، وبأسلوب صارم، يُمسك الخطأ فوراً.

الاستمارة 2: إحالة الممتلكات العالمية القراءة فقط

// sloppy mode
undefined = 5; // silently fails (undefined remains undefined)
NaN = 6; // silently fails
console.log(undefined, NaN); // undefined, NaN

// strict mode
'use strict';
undefined = 5; // TypeError: Cannot assign to read-only property 'undefined' of object '#<Window>'
NaN = 6; // TypeError

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

المقتطف 3: الأسماء المزدوجة للملكية

In strict mode, duplicate property names in object literals cause a . In sloppy mode, the last one wins. This is especially helpful for detecting mistakes when editing formation objects or when copying code.

// sloppy: works, last value wins
var config = {
 host: "example.com",
 host: "backup.com" // no error
};
console.log(config.host); // "backup.com"

// strict: SyntaxError
'use strict';
var config = {
 host: "example.com",
 host: "backup.com" // SyntaxError: Duplicate data property in object literal not allowed in strict mode
};

الشلالات المشتركة والترحيل إلى مودي ستريت

وفي حين أن الطريقة الصارمة تحقق فوائد كثيرة، فإن الهجرة إلى قاعدة بيانات قائمة كبيرة يمكن أن تطرح تحديات، وقد تفشل الآن بعض الأنماط القديمة التي تعتبر مقبولة في الوثيقة ES-3/5، وتشمل أكثر المسائل شيوعا ما يلي:

  • Undeclared changing assignments: Code relying on implicit globals must be updated to declare variables.
  • Using statements]: These must be refactored into explicit property accesses.
  • Octal literals: يستعاض عن ب أو عشري .
  • Accessing ]: This is disallowed; use named function expressions instead.
  • Duplicate parameter names]: must be removed or renamed.
  • Using ] onتغييرات أو الوظائف ]: هذه العملية محظورة.

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

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

الاستنتاج وأفضل الممارسات

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

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

To dive deep, refer to the MDN documentation on strict mode] for a complete list of restrictions and examples. For historical context, the ]ECMAScript specification explains the formal rules. Additionally, the ESLint strict rule[FLT: