استفاده از حالت سخت‌گیرانه

از ویکی‌کد
پرش به ناوبری پرش به جستجو
Main Page Tutorial
JavaScript-menu.png
موارد آموزشی
فرم‌ها در جاوا اسکریپت
اشیاء در جاوا اسکریپت
تابع در جاوا اسکریپت
HTML DOM در جاوا اسکریپت
Browser BOM در جاوا اسکریپت
AJAX در جاوا اسکریپت
JSON در جاوا اسکریپت
جی‌کوئری در برابر جاوا اسکریپت
مرجع جاوا اسکریپت

عبارت "use strict"; مشخص می‌کند که کد جاوا اسکریپت می‌بایست در حالت سخت‌گیرانه (به انگلیسی: strict mode) اجرا شود. [۱]

پیداش دستور "use strict"

پیدایش دستور "use strict" در ECMAScript نسخه ۵ بود.

این یک عبارت نیست، اما یک نوع عبارت literal است که توسط نسخه‌های قدیمی جاوا اسکریپت نادیده گرفته می‌شود.

هدف استفاده از "use strict" این است که مشخص کند کد جاوا اسکریپت می‌بایست در حالت سخت‌گیرانه یا strict mode اجرا شود.

درحالت سخت‌گیرانه یا Strict mode، برای مثال، شما نمی‌توانید از متغیرهای تعریف نشده استفاده کنید.

تمامی مرورگرهای مدرن به جز اینترنت اکسپلور نسخه ۹ و پایین‌تر از عبارت "use strict" پشتیبانی می‌کنند.

دستور Chrome.gif Edge.gif Firefox.gif Safari.gif Opera.gif
"use strict"
۱۳٫۰ ۱۰٫۰ ۴٫۰ ۶٫۰ ۱۲٫۱

اعداد موجود در جدول، شماره اولین نسخه از مرورگر است که به طور کامل از دستور حالت سخت‌گیرانه یا "use strict" پشتیبانی می‌کند.

شما می‌توانید از حالت سخت‌گیرانه یا strict mode در تمامی نرم‌افزارهای خود استفاده کنید. این امر به شما کمک می‌کند که کد تمیزتری بنویسید همچنین از مواردی چون استفاده از متغیرهای تعریف نشده، جلوگیری می‌کند.  تنها یک رشته متنی است، بنابراین مرورگر IE نسخه ۹ در صورتی که این رشته متنی را متوجه نشود، خطا ایجاد نمی‌کند.

تعریف حالت سخت گیرانه (به انگلیسی: Strict Mode)

حالت سخت‌گیرانه یا Strict mode با اضافه کردن عبارت "use strict"; در ابتدای اسکریپت یا تابع تعریف می‌شود.

تعریف حالت سخت‌گیرانه در ابتدای یک اسکریپت، خاصیت تعریف کلی (به انگلیسی: global) دارد (تعریف حالت سخت‌گیرانه در ابتدای اسکریپت موجب می‌شود که تمام کدها در حالت سخت‌گیرانه اجرا شود)

مثال

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


مشاهدهٔ نتیجه


مثال

1 "use strict";
2 myFunction();
3 
4 function myFunction() {
5   y = 3.14;   // This will also cause an error because y is not declared
6 }


مشاهدهٔ نتیجه


مثال

1 x = 3.14;       // This will not cause an error.
2 myFunction();
3 
4 function myFunction() {
5   "use strict";
6   y = 3.14;   // This will cause an error
7 }


مشاهدهٔ نتیجه


شیوه نوشتار دستور ";the strict"

برای دستور حالت سخت‌گیرانه یا Strict mode شیوه نوشتار طراحی شده‌است تا با نسخه‌های قدیمی جاوا اسکریپت سازگاری داشته باشد.

در جاوا اسکریپت کامپایل کردن یک عبارت عددی (;۵+۴) یا یک عبارت رشته‌ای یا متنی (;"John Doe") اثر جانبی‌ای ندارد. این عبارت به طور کاملاً ساده به یک متغیری که وجود ندارد تبدیل می‌شود و سپس از بین می‌رود.

بنابراین "use strict"; تنها برای کامپایلرهایی که معنی آن را “درک می‌کنند” اثر می‌کند.

چرا حالت سخت گیرانه (به انگلیسی: Strict Mode)

حالت سخت‌گیرانه نوشتن کد جاوا اسکریپت به صورت "امن" را مهیا می‌سازد.

حالت سخت‌گیرانه نوشتن بد دستورات را که قبل از این به عنوان “شیوه نوشتار بد” دستور یا "bad syntax" شناخته می‌شد، را خطا می‌شناسد.

به عنوان مثال، در حالت عادی جاوا اسکریپت، ننوشتن نام یک متغیر موجب ایجاد یک متغیر کلی یا Global می‌شود.

در حالت سخت‌گیرانه یا Strict mode، این امر موجب بروز یک خطا می‌شود و ایجاد یک متغیر کلی یا global را به صورت اتفاقی یا تصادفی غیرممکن می‌سازد.

در حالت عادی در جاوا اسکریپت، توسعه دهنده در صورتی که ویژگی‌های فقط-خواندنی را مقدار دهی کند، پیغام خطایی دریافت نمی‌کند.

در حالت سخت‌گیرانه یا Strict mode، هر گونه مقداردهی ویژگی‌های فقط-خواندنی، ویژگی‌های فقط دریافت کردنی (به انگلیسی: getter-only)، ویژگی ای که وجود نداشته باشد، متغیری که وجود ندارد یا شی ای که وجود ندارد، موجب بروز خطا می‌شود.

مواردی که در حالت سخت گیرانه (به انگلیسی: Strict Mode) مجاز نیستند

استفاده از متغیری که تعریف نشده، مجاز نیست:

1 "use strict";
2 x = 3.14;                // This will cause an error


مشاهدهٔ نتیجه

اشیاء نیز نوعی متغیر محسوب می‌شوند.

استفاده از شیءای که تعریف نشده، مجاز نیست:

1 "use strict";
2 x = {p1:10, p2:20};      // This will cause an error


مشاهدهٔ نتیجه


حذف کردن یک متغیر (یا یک شیء) مجاز نیست.

1 "use strict";
2 var x = 3.14;
3 delete x;                // This will cause an error


مشاهدهٔ نتیجه


حذف کردن یک تابع مجاز نیست.

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


مشاهدهٔ نتیجه


استفاده از نام تکراری برای پارامتر تابع مجاز نیست:

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


مشاهدهٔ نتیجه


استفاده ازعبارتهای عددی مبنای ۸ یا octal مجاز نیست:

1 "use strict";
2 var x = 010;             // This will cause an error


مشاهدهٔ نتیجه


استفاده از کاراکترهای escape یا کاراکترهای نادیده گرفتن مخصوص داده‌های بر مبنای هشت یا octal مجاز نیست:

1 "use strict";
2 var x = "\010";            // This will cause an error


مشاهدهٔ نتیجه


مقدار دهی ویژگی فقط-خواندنی مجاز نیست:

1 "use strict";
2 var obj = {};
3 Object.defineProperty(obj, "x", {value:0, writable:false});
4 
5 obj.x = 3.14;            // This will cause an error


مشاهدهٔ نتیجه


مقداردهی ویژگی فقط گرفتی (به انگلیسی: get only property) نیز مجاز نیست:

1 "use strict";
2 var obj = {get x() {return 0} };
3 
4 obj.x = 3.14;            // This will cause an error


مشاهدهٔ نتیجه


حذف کردن یک ویژگی غیرقابل حذف، مجاز نیست:

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


مشاهدهٔ نتیجه


از کلمه eval به عنوان نام متغیر نمی‌توان استفاده کرد:

1 "use strict";
2 var eval = 3.14;         // This will cause an error


مشاهدهٔ نتیجه


از کلمه arguments به عنوان نام متغیر نمی‌توان استفاده کرد:

1 "use strict";
2 var arguments = 3.14;    // This will cause an error


مشاهدهٔ نتیجه


استفاده از کلمه with نمی‌توان استفاده کرد:

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


مشاهدهٔ نتیجه


به خاطر دلایل امنیتی، استفاده از متد eval() برای تعریف متغیرها در scope یا ناحیه ای که در آن فراخوانی شده‌است، مجاز نیست:

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


مشاهدهٔ نتیجه


کلمه کلیدی this در توابع در حالت سخت‌گیرانه یا Strict به صورت متفاوتی رفتار می‌کند.

این کلمه کلیدی this مربوط به شی ای می‌شود که تابع را فراخوانی کرده‌است.

اگر شی (به انگلیسی: object)، مشخص نباشد، توابع در حالت سخت‌گیرانه (به انگلیسی: Strict mode) مقدار undefined را برمی‌گردانند و توابع در حالت عادی، شیء کلی (به انگلیسی: Global) ای را یعنی window (به فارسی: پنجره) را برمی‌گردانند:

1 "use strict";
2 function myFunction() {
3   alert(this); // will alert "undefined"
4 }
5 myFunction();


مشاهدهٔ نتیجه


برخی از موارد آینده!

کلمات کلیدی رزرو شده برای نسخه‌های آینده جاوا اسکریپت به عنوان نام متغیر در حالت سخت‌گیرانه یا Strict mode قابل استفاده نیستند.

این کلمات کلیدی عبارتتند از:

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield
1 "use strict";
2 x = 3.14;       // This will cause an error because x is not declared


مشاهدهٔ نتیجه


توجه داشته باشید!

عبارت "use strict" تنها در ابتدای اسکریپت یا تابع قابل استفاده است.


منابع آموزشی