"use strict"براي جاوااسكريپت تعريف ميكند كه حالت سختگيرانه"strict mode" رارعايت نمايد.
اين يك دستورنيست، اما عبارتي تحت لفظي يا ليترالي است كه بوسيله نسخه هاي قديمي ناديده گرفته ميشود .اما در نسخه هاي جديد مشخص ميكند كه جاوااسكريپت اجرا را در حالت سختگيرانه انجام دهد
براي مثال در حالت سختگيرانه نمي توانيد از متغيرهاي اعلام يا تعريف نشده استفاده نمائيد.
همه مرورگرهاي مدرن بجز اينترنت اكسپلورر9 و پائين تر، حالت سختگيرانه"strict mode"را پشتيباني ميكنند.
directive | |||||
---|---|---|---|---|---|
"use strict" | 13.0 | 10.0 | 4.0 | 6.0 | 12.1 |
اعداد مشخص شده در جدول اولين نسخه مرورگراست كه ازآن كاملا پشتيباني ميكند
شما مي توانيد در همه برنامه ها از حالت سختگيرانه يعني ليترال"use strict"استفاده نمائيد . با اين كار مجبور برعايت بهتر كدنويسي وجلوگيري از خطاهاي احتمالي مثل موارد ناشي ازاستفاده ازمتغيرهاي اعلام نشده.
استفاده از"use strict" حتي در نسخه هاي قديمي كه براي آنها ناشناخته است ايجاد خطا نمي كندو منجر بهthrow error نميگردد .
حالت سختگيرانه با اصافه نمودن رشته"use strict"; به ابتداي اسكريپت يا تابع اعمال ميشود.
افزودن تعريف حالت سخت گيرانه به ابتداي اسكريپت باعث رعايت سرتاسري در اسكريپت ميشود، يعني حالتGlobal را دارد .
مثال ـ حالت سختگيرانه
"use strict"; x = 3.14; // This will cause an error because x is not declared
همان مثال قبلي را با try{} and catch( ) {} خطا يابي ميشود تامشاهده گردد تفاوت كجاست.
"use strict"; try {x = 3.14;} // This will cause an error (x is not defined). catch(err){alert(err.message);}
در اديتور دستور"use strict" را حذف ونتيجه اجرا را مشاهده فرمائيد.
مثال ـ كنترل سختگيرانه درتابع باتوجه به حالت سراسري بودن كنترل"use Strict" . درابتدا اسكريپت.
"use strict"; myFunction(); function myFunction() { y = 3.14; // This will also cause an error because y is not declared }
مثال ـ درمثال زير ميدان"use strict"; فقط تابع است.
Element | |||||
---|---|---|---|---|---|
<dt> خطائي گرفته نمي شود. | Yes
فرم كلي حالت سختگيرانهThe "use strict"; Syntax - | Yes
فرم كلي تعريف سختگيرانه بگونه اي تنظيم شده كه با نسخه هاي قديمي هم منطبق ميباشد. | Yes
كمپايل يك ليترال عددي(4+5;) يا يك ليترال رشته اي("John Doe") | Yes
در جاوااسكريپت هيچ عوارض جانبي نداردومشكلي ايجاد نميكند .بسادگي يك غيرمتغير موجود را | Yes كمپايل وازآن ميگذرد يا رهايش ميكند. |
تگ<dt> از ويژگي هاي جهاني HTML پيروي ميكند .
نوشتن دستورات در حالت سختگيرانه ايمن وساده تراست.
حالت سختگيرانه روال خطايابي نحوي بد(bad Syntax) را به خطايابي واقعي
تگ فوق همچنين از ويژگي هاي رويدادي پيروي ميكند.
(real Error)تبديل كرده است .بعنوان مثال در حالت عادي جاوااسكريپت، تايپ اشتباه در نام يك متغير، منجر به ايجاد متغير
اغلب مرورگرها نمايش عنصر<dt> مطابق تنظيمات پيش فرضي زيرانجام ميدهند .
نا خواسته سراسري ميشد، اما در حالت سختگيرانه خطائي پرتاب ميگردد، كه ميتوان بموقع آنراElement داده نمي شود. | |||||
---|---|---|---|---|---|
<dt> غيرموجود وشئ غيرموجود منجر به پرتاب خطا ميشود. | Yes
Not Allowed in Strict Mode | Yes
موارد غير مجاز حالت سختگيرانه | Yes
استفاده متغيري بدون تعريف آن مجاز نمي باشد. | Yes
مثال ـ استفاده متغير تعريف نشده | Yes
"use strict"; x = 3.14; // This will cause an error |
شئ ها هم يك نوع متغير اند.
تگ<dt> از ويژگي هاي جهاني HTML پيروي ميكند .
مثال ـ استفاده از شئ تعريف نشده كه مجازنيست
تگ فوق همچنين از ويژگي هاي رويدادي پيروي ميكند.
"use strict";
x = {p1:10, p2:20};
اغلب مرورگرها نمايش عنصر<dt> مطابق تنظيمات پيش فرضي زيرانجام ميدهند .
حذف متغير يا شئي در حالت سختگيرانه مجاز نيست
مثال ـ حذف متغير
"use strict"; let x = 3.14; delete x; // This will cause an error
در حالت سختگيرانه حذف تابع مجاز نيست.
مثال ـ حذف تابع
"use strict"; function x(p1, p2) {}; delete x; // This will cause an error
تكرار نام در پارامترهاي تابع مجاز نمي باشد.
مثال ـ تكرار نام در تابع
"use strict"; function x(p1, p1) {}; // This will cause an error
در حالت سختگيرانه ليترال هاي عددي اكتال مجاز نيستند
"use strict"; let x = 010; // This will cause an error
كراكتر اسكيپ(\) در اكتال مجاز نيستند .
"use strict"; let x = "\010"; // This will cause an error
نوشتن در يك ويژگي فقط خواندني مجاز نيست
"use strict"; const obj = {}; Object.defineProperty(obj, "x", {value:0, writable:false}); obj.x = 3.14; // This will cause an error
نوشتن در ويژگي فقط گرفتني مجاز نيست
"use strict"; const obj = {get x() {return 0} }; obj.x = 3.14;
حذف يك ويژگي غير حذفي مجاز نيست
"use strict"; delete Object.prototype; // This will cause an error
كي وردeval بعنوان نام متغير مجاز نيست .
"use strict"; let eval = 3.14; // This will cause an error
كلمهarguments بعنوان متغير مجاز نيست .
"use strict"; let arguments = 3.14; // This will cause an error
دستورwith مجاز نيست
"use strict"; with (Math){x = cos(2)}; // This will cause an error
بدلايل امنيتي باeval() نميتوان براي ميدانيكه آن فرخوان ميشود متغيري ايجاد كرد.
در حالت سختگيرانه نمي توان متغيري را قبل از تعريف استفاده نمود.
"use strict"; eval ("x = 2"); alert (x); // This will cause an error
در حالت سختگيرانه نمي توان باeval() متغيري را تعريف نمود .
"use strict"; eval ("var x = 2"); alert (x); // This will cause an error
همچنين باeval() نمي توان با let متغيري را تعريف نمود .
eval ("let x = 2");
alert (x); // This will cause an error
كي وردthis در تابع رفتاري متفاوتي در حالت سختگيرانه دارد .
كي وردthis در تابع به شئئ مراجعه ميكند .اگر شئ وجود نداشته باشد، درحالت سختگيرانه نتيجه برگشتيundefined مي باشد .اما در حالت عادي برگشتي شئي سراسري (window) مي باشد.
"use strict"; function myFunction() { alert(this); // will alert "undefined" } myFunction();
كى ورد هاي رزرو شده براي نسخه هاي آينده جاوااسكريپت كه نمي توان آنهارا بعنوان متغير استفاده نمود مطابق زيرند:
"use strict"; let public = 1500; // This will cause an error
مواظب باش ـ استفاده از دستور سختگيرانه"use strict"; فقط ابتداي اسكريپت يا تابع قابل شناسائي هستند.