‎‎استفاده سختگيرانه جاوااسكريپتJavaScript Use Strict -‎

Previous >    <Next  

‎"use strict‎"‎‎‎براي جاوااسكريپت تعريف ميكند كه حالت سختگيرانه‎"strict mode‎"‎ ‎رارعايت نمايد.

‎اين يك دستورنيست، اما عبارتي تحت لفظي يا ليترالي است كه بوسيله نسخه هاي قديمي ناديده گرفته ‎ميشود .اما در نسخه هاي جديد مشخص ميكند كه جاوااسكريپت اجرا را در حالت سختگيرانه انجام دهد

‎‎براي مثال در حالت سختگيرانه نمي توانيد از متغيرهاي اعلام يا تعريف نشده استفاده نمائيد.

‎‎پشتيباني مرورگرBrowser Support -‎

‎همه مرورگرهاي مدرن بجز اينترنت اكسپلورر9 و پائين تر، حالت سختگيرانه‎"strict mode‎"‎را ‎پشتيباني ميكنند.

‎directive‎ Chorome Edge Firefox Safari Opera
‎‎"use strict‎"‎ ‎‎13.0‎ ‎‎10.0‎ ‎‎4.0‎ ‎‎6.0‎ ‎‎12.1‎

‎‎اعداد مشخص شده در جدول اولين نسخه مرورگراست كه ازآن كاملا پشتيباني ميكند

‎شما مي توانيد در همه برنامه ها از حالت سختگيرانه يعني ليترال‎"use strict‎"‎استفاده نمائيد . ‎با اين كار مجبور برعايت بهتر كدنويسي وجلوگيري از خطاهاي احتمالي مثل موارد ناشي ازاستفاده ‎ازمتغيرهاي اعلام نشده.

‎استفاده از‎‎"use strict‎"‎ حتي در نسخه هاي قديمي كه براي آنها ناشناخته است ‎ايجاد خطا نمي كندو منجر بهthrow error نميگردد .

‎‎تعريف حالت سختگيرانهDeclaring Srict Mode -‎

‎حالت سختگيرانه با اصافه نمودن رشته‎‎"use strict‎";‎ به ابتداي اسكريپت يا تابع ‎اعمال ميشود.

‎افزودن تعريف حالت سخت گيرانه به ابتداي اسكريپت باعث رعايت سرتاسري در اسكريپت ميشود، يعني ‎حالتGlobal را دارد .

‎‎مثال ـ حالت سختگيرانه

"use strict";
x = 3.14;       // This will cause an error because x is not declared

--(go to editor for change code and run)

‎همان مثال قبلي را با‎ try{} and catch( ) {}‎ خطا يابي ميشود تامشاهده گردد تفاوت ‎كجاست.

"use strict";
try {x = 3.14;}  // This will cause an error (x is not defined).
catch(err){alert(err.message);}

--(go to editor for change code and run)

‎‎در اديتور دستور‎‎"use strict‎"‎ را حذف ونتيجه اجرا را مشاهده فرمائيد.

‎مثال ـ كنترل سختگيرانه درتابع باتوجه به حالت سراسري بودن كنترل‎‎"use Strict‎"‎ . ‎درابتدا اسكريپت.

"use strict";
myFunction();

function myFunction() {
  y = 3.14;   // This will also cause an error because y is not declared
}

--(go to editor for change code and run)

‎‎پشتيباني مرورگرBrowser Support -‎

‎‎مثال ـ درمثال زير ميدان‎‎"use strict‎";‎ فقط تابع است.

x = 3.14;       // This will not cause an error.
myFunction();

function myFunction() {
  "use strict";
  y = 3.14;   // This will cause an error
}

‎در مثال بالا دستور‎x=3.14;‎ ،مشمول كنترل نبوده وبا توجه باينكه متغير تعريف نشده

‎ولي اين‎‎"use stric‎";‎ براي نسخه هاي جديد كمپايلرها شناخته شده وداراي معني

‎Element‎

--(go to editor for change code and run)

Chorome Edge Firefox Safari Opera
‎‎<dt>‎‎ ‎خطائي گرفته نمي شود.

‎Yes‎

‎‎فرم كلي حالت سختگيرانهThe ‎"use strict‎"; Syntax -‎

‎Yes‎

‎‎فرم كلي تعريف سختگيرانه بگونه اي تنظيم شده كه با نسخه هاي قديمي هم منطبق ميباشد.

‎Yes‎

‎كمپايل يك ليترال عددي‎(4+5;)‎ يا يك ليترال رشته اي‎(‎"John Doe‎")

‎Yes‎

‎در جاوااسكريپت هيچ عوارض جانبي نداردومشكلي ايجاد نميكند .بسادگي يك غيرمتغير موجود را

‎Yes‎ ‎كمپايل وازآن ميگذرد يا رهايش ميكند.

‎است.

‎‎ويژگي هاي جهانيGlobal Attributes -‎

‎‎چرا حالت سختگيرانهWhy Strict Modoe‎? -‎

‎‎تگ‎<dt>‎ از ويژگي هاي جهاني HTML پيروي ميكند .

‎‎نوشتن دستورات در حالت سختگيرانه ايمن وساده تراست.

‎‎ويژگي هاي رويداديEvent Attributes -‎

‎حالت سختگيرانه روال خطايابي نحوي بد‎(bad Syntax)‎ را به خطايابي واقعي

‎‎تگ فوق همچنين از ويژگي هاي رويدادي پيروي ميكند.

(real Error)‎‎تبديل كرده است .

‎‎تنظيمات پيش فرضDefault CSS Settings -‎

‎بعنوان مثال در حالت عادي جاوااسكريپت، تايپ اشتباه در نام يك متغير، منجر به ايجاد متغير

‎‎اغلب مرورگرها نمايش عنصر‎<dt>‎ مطابق تنظيمات پيش فرضي زيرانجام ميدهند .

‎نا خواسته سراسري ميشد، اما در حالت سختگيرانه خطائي پرتاب ميگردد، كه ميتوان بموقع آنرا

‎‎پشتيباني مرورگرBrowser Support -‎

‎اصلاح نمود وآن اتفاق دراين حالت غير ممكن ميشود.

‎در حالت عادي براي انتساب مقدار به ويژگي هاي فقط خواندني هيچ پيغام انعكاسي براي توسعه دهنده

‎در حالت سختگيرانه ، هر انتساب به ويژگي نا نوشتني، ويژگي غير موجود، ويژگي فقط گيرنده، متغير

--(go to editor for change code and run)

‎Element‎ ‎داده نمي شود. Chorome Edge Firefox Safari Opera
‎‎<dt>‎‎ ‎غيرموجود وشئ غيرموجود منجر به پرتاب خطا ميشود.

‎Yes‎

‎Not Allowed in Strict Mode‎

‎Yes‎

‎‎موارد غير مجاز حالت سختگيرانه

‎Yes‎

‎‎استفاده متغيري بدون تعريف آن مجاز نمي باشد.

‎Yes‎

‎‎مثال ـ استفاده متغير تعريف نشده

‎Yes‎
"use strict";
x = 3.14;                // This will cause an error

‎‎ويژگي هاي جهانيGlobal Attributes -‎

‎‎شئ ها هم يك نوع متغير اند.

‎‎تگ‎<dt>‎ از ويژگي هاي جهاني HTML پيروي ميكند .

‎‎ويژگي هاي رويداديEvent Attributes -‎

‎‎مثال ـ استفاده از شئ تعريف نشده كه مجازنيست

‎‎تگ فوق همچنين از ويژگي هاي رويدادي پيروي ميكند.

"use strict";
x = {p1:10, p2:20};     

‎‎تنظيمات پيش فرضDefault CSS Settings -‎

--(go to editor for change code and run)

‎‎اغلب مرورگرها نمايش عنصر‎<dt>‎ مطابق تنظيمات پيش فرضي زيرانجام ميدهند .

‎‎حذف متغير يا شئي در حالت سختگيرانه مجاز نيست

‎‎مثال ـ حذف متغير

"use strict";
let x = 3.14;
delete x;                // This will cause an error

--(go to editor for change code and run)

‎‎در حالت سختگيرانه حذف تابع مجاز نيست.

‎‎مثال ـ حذف تابع

"use strict";
function x(p1, p2) {};
delete x;                // This will cause an error 

--(go to editor for change code and run)

‎‎تكرار نام در پارامترهاي تابع مجاز نمي باشد.

‎‎مثال ـ تكرار نام در تابع

"use strict";
function x(p1, p1) {};   // This will cause an error

--(go to editor for change code and run)

‎‎در حالت سختگيرانه ليترال هاي عددي اكتال مجاز نيستند

"use strict";
let x = 010;             // This will cause an error

--(go to editor for change code and run)

‎‎كراكتر اسكيپ‎(\)‎ در اكتال مجاز نيستند .

"use strict";
let x = "\010";            // This will cause an error

--(go to editor for change code and run)

‎‎نوشتن در يك ويژگي فقط خواندني مجاز نيست

"use strict";
const obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});

obj.x = 3.14;            // This will cause an error

--(go to editor for change code and run)

‎‎نوشتن در ويژگي فقط گرفتني مجاز نيست

"use strict";
const obj = {get x() {return 0} };

obj.x = 3.14;   

--(go to editor for change code and run)

‎‎حذف يك ويژگي غير حذفي مجاز نيست

"use strict";
delete Object.prototype; // This will cause an error

--(go to editor for change code and run)

‎‎كي ورد‎eval‎ بعنوان نام متغير مجاز نيست .

"use strict";
let eval = 3.14;         // This will cause an error

--(go to editor for change code and run)

‎‎كلمه‎arguments ‎ بعنوان متغير مجاز نيست .

"use strict";
let arguments = 3.14;    // This will cause an error

--(go to editor for change code and run)

‎‎دستور‎with‎ مجاز نيست

"use strict";
with (Math){x = cos(2)}; // This will cause an error

--(go to editor for change code and run)

‎بدلايل امنيتي با‎eval()‎‎ نميتوان براي ميدانيكه آن فرخوان ميشود ‎متغيري ايجاد كرد.

‎‎در حالت سختگيرانه نمي توان متغيري را قبل از تعريف استفاده نمود.

"use strict";
eval ("x = 2");
alert (x);      // This will cause an error

--(go to editor for change code and run)

‎‎در حالت سختگيرانه نمي توان با‎eval()‎‎ متغيري را تعريف نمود .

"use strict";
eval ("var x = 2");
alert (x);    // This will cause an error

--(go to editor for change code and run)

‎‎همچنين با‎eval()‎‎ نمي توان با let متغيري را تعريف نمود .

eval ("let x = 2");
alert (x);        // This will cause an error

--(go to editor for change code and run)

‎‎كي ورد‎this‎ در تابع رفتاري متفاوتي در حالت سختگيرانه دارد .

‎كي وردthis در تابع به شئئ مراجعه ميكند .اگر شئ وجود نداشته باشد، درحالت سختگيرانه نتيجه ‎برگشتيundefined مي باشد .اما در حالت عادي برگشتي شئي سراسري ‎(window)‎ ‎مي باشد.

"use strict";
function myFunction() {
  alert(this); // will alert "undefined"
}
myFunction();

--(go to editor for change code and run)

‎‎آينده نگريFuture Proof -‎

‎كى ورد هاي رزرو شده براي نسخه هاي آينده جاوااسكريپت كه نمي توان آنهارا بعنوان متغير ‎استفاده نمود مطابق زيرند:

"use strict";
let public = 1500;      // This will cause an error

--(go to editor for change code and run)

‎مواظب باش ـ استفاده از دستور سختگيرانه‎"use strict‎"; فقط ابتداي اسكريپت يا تابع قابل ‎شناسائي هستند.


Previous >    <Next