با عرض سلام خدمت کاربران محترم سایت پی وی لرن.
در این جلسه قصد داریم تا با Strict Mode در جاوا اسکریپت JavaScript یا دستور “use strict” در جاوا اسکریپت آشنا شویم.
strict mode یا حالت سخت به حالتی گفته می شود که کد های جاوا اسکریپت با سختگیری بیشتری تفسیر و اجرا می شوند. (مفید برای برنامه نویسی ایمن در جاوا اسکریپت)
;”use strict” تعیین می کند که کد جاوا اسکریپت باید در strict mode اجرا شود.
دستور “use strict” در جاوا اسکریپت یک دستور جدید در نسخه ۵ ECMAScript می باشد.
این دستور در واقع یک دستور نیست بلکه یک عبارت لیترال هست که توسط نسخه های قبل تر جاوا اسکریپت پشتیبانی نمی شود.
با strict mode شما به عنوان مثال نمی توانید از متغیر هایی که نعریف نکرده اید استفاده کنید. (این دستور به نوشتن یک کد تمیز و ایمن در جاوا اسکریپت کمک می کند)
تمام مرورگر های جدید از “use strict” پشتیبانی می کنند:
Directive | Chrome | Internet Explorer / Edge | Firefox | Safari | Opera |
---|---|---|---|---|---|
“use strict” | ۱۳٫۰ | ۱۰٫۰ | ۴٫۰ | ۶٫۰ | ۱۲٫۱ |
strict mode با اضافه شدن “use strict” به اول کد فعال می شود.
ابتدای اسکریپت محدوه سراسری دارد و به این معنی است که تمام کد در strict mode اجرا خواهد شد.
1 2 | "use strict"; x = 3.14; // This will cause an error because x is not declared |
1 2 3 4 5 6 7 | x = 3.14; // This will not cause an error. myFunction(); function myFunction() { "use strict"; y = 3.14; // This will cause an error } |
اعلام شده در داخل یک تابع، محدوده محلی (تنها کد داخل تابع در strict mode است):
1 2 3 4 5 6 7 | x = 3.14; // This will not cause an error. myFunction(); function myFunction() { "use strict"; y = 3.14; // This will cause an error } |
سینتکس، اعلام strict mode، برای سازگاری با نسخه های قدیمیتر جاوا اسکریپت طراحی شده است.
کامپایل یک عدد صحیح (۵+۴) یا رشته ای با حروف الفبا (“John Doe”؛) در یک برنامه جاوا اسکریپت عوارض جانبی ندارد. به سادگی به یک متغیر غیر موجود کامپایل شده و از بین می رود.
بنابراین “use strict”؛ تنها برای کامپایلرهای جدید مهم است که آن را درک می کنند.
strict mode باعث آسان تر نوشته شدن کد امن در جاوا اسکریپت می شود.
strict mode ساختار های دستوری بد قبلی که پذیرفته می شدند را به خطا های واقعی تبدیل می کند.
برای مثال در جاوا اسکریپت معمولی اشتباه نوشتن نام یک متغیر آن را تبدیل به یک متغیر سراسری می کند.
اما در strict mode این کار باعث ایجاد خطا می شود و از ایجاد یک متغیر سراسری به صورت تصادفی جلوگیری می کند.
درstrict mode هرگونه اختصاص مقدار به متغیر های غیر قابل نوشتن، متغیر هایی که وجود ندارند و یا اشیایی که وجود ندارند، یک خطا را پرتاب خواهد کرد.
علاوه بر موارد گفته شده، کار های دیگری نیز هستند که یک خطا ایجاد می کند:
استفاده از متغیر بدون تعریف آن مجاز نیست :
1 2 | "use strict"; x = 3.14; // This will cause an error |
استفاده از آبجکت بدون تعریف آن مجاز نیست:
1 2 | "use strict"; x = {p1:10, p2:20}; // This will cause an error |
حذف متغیر یا آبجکت نیز مجاز نیست :
1 2 3 | "use strict"; var x = 3.14; delete x; // This will cause an error |
حذف کردن تابع:
1 2 3 | "use strict"; function x(p1, p2) {}; delete x; // This will cause an error |
پارامتر تکراری در تابع:
1 2 | "use strict"; function x(p1, p1) {}; // This will cause an error |
استفاده از اعداد مبنای هشتی:
1 2 | "use strict"; var x = 010; // This will cause an error |
استفاده از مبنای ۸ در قالب رشته ای نیز مجاز نیست :
1 2 | "use strict"; var x = "\010"; // This will cause an error |
اختصاص مقدار به پروپرتی فقط خواندنی:
1 2 3 4 5 | "use strict"; var obj = {}; Object.defineProperty(obj, "x", {value:0, writable:false}); obj.x = 3.14; // This will cause an error |
اختصاص مقدار به خصوصیات get-only مجاز نیست :
1 2 3 4 | "use strict"; var obj = {get x() {return 0} }; obj.x = 3.14; // This will cause an error |
حذف کردن یک پروپرتی غیرقابل حذف:
1 2 | "use strict"; delete Object.prototype; // This will cause an error |
رشته “eval” نمی تواند به عنوان متغیر استفاده شود:
1 2 | "use strict"; var eval = 3.14; // This will cause an error |
رشته “arguments” نمی تواند به عنوان متغیر استفاده شود:
1 2 | "use strict"; var arguments = 3.14; // This will cause an error |
دستور with:
1 2 | "use strict"; with (Math){x = cos(2)}; // This will cause an error |
به دلایل امنیتی تابع ()eval نمی تواند متغیری را در محدوه ای که فراخوانی می شود ایجاد کند:
1 2 3 | "use strict"; eval ("var x = 2"); alert (x); // This will cause an error |
کلمات کلیدی که برای نسخه های جاوااسکریپت آینده نگهداری می شوند نمی توانند به عنوان نام متغیر در حالت strict mode استفاده شوند.
اینها هستند:
1 2 | "use strict"; var public = 1500; // This will cause an error |
اخطار : دستور “use strict” فقط در ابتدای یک اسکریپت یا یک تابع شناسایی می شود.
جلسه استفاده از Strict Mode در جاوا اسکریپت JavaScript به پایان رسید.