JavaScript:استفاده از مد یا حالت سخت‌گیرانه (use strict) در جاوااسکریپت

از ویکی کد
پرش به ناوبری پرش به جستجو
میانبر:
الگو:اج
دورهٔ آموزشی جاوااسکریپت
Javascript.jpg
Tutorial
۱آموزش جاوااسکریپت
۲مقدمه‌ای بر جاوااسکریپت
۳JavaScript:قوانین و اصول اولیه زبان جاوااسکریپت
۴JavaScript:خروجی جاوااسکریپت
۵JavaScript:عبارت‌ها در جاوااسکریپت
۶JavaScript:شیوهٔ نوشتن (Syntax) عبارات یا دستورات در جاوااسکریپت
۷JavaScript:نظرات یا کامنت‌ها (Comments) در جاوااسکریپت
۸JavaScript:متغیرها در جاوااسکریپت
۹JavaScript:عملگرهای جاوااسکریپت
۱۰JavaScript:عملگرهای ریاضی در جاوااسکریپت
۱۱JavaScript:عملگرهای مقداردهی در جاوااسکریپت
۱۲JavaScript:انواع داده‌ها در جاوااسکریپت
۱۳JavaScript:توابع در جاوااسکریپت
۱۴JavaScript:اشیاء (object) در جاوااسکریپت
۱۵JavaScript:رویدادها در جاوااسکریپت
۱۶JavaScript:رشته‌های متنی (string) در جاوااسکریپت
۱۷JavaScript:متدهای نوع داده متنی یا رشته‌ای در جاوااسکریپت
۱۸JavaScript:اعداد در جاوااسکریپت
۱۹JavaScript:متدهای داده‌های عددی در جاوااسکریپت
۲۰JavaScript:آرایه‌ها در جاوااسکریپت
۲۱JavaScript:متدهای آرایه در جاوااسکریپت
۲۲JavaScript:مرتب‌سازی آرایه‌ها در جاوااسکریپت
۲۳JavaScript:متدهای پیمایش آرایه در جاوااسکریپت
۲۴JavaScript:اشیاء تاریخ و زمان در جاوااسکریپت
۲۵JavaScript:فرمت‌های تاریخ و زمان در جاوااسکریپت
۲۶JavaScript:متدهای دریافت تاریخ و زمان در جاوااسکریپت
۲۷JavaScript:متدهای تنظیم زمان و تاریخ در جاوااسکریپت
۲۸JavaScript:شی ریاضی (Math) در جاوااسکریپت
۲۹JavaScript:ایجاد عدد تصادفی در جاوااسکریپت
۳۰JavaScript:مقادیر بولین (Booleans) در جاوااسکریپت
۳۱JavaScript:عملگرهای منطقی و مقایسه‌ای در جاوااسکریپت
۳۲JavaScript:ساختار if else و else if در جاوااسکریپت
۳۳JavaScript:تکه کد Switch در جاوا اسکریپت
۳۴JavaScript:حلقه For در جاوااسکریپت
۳۵JavaScript:حلقه While در جاوااسکریپت
۳۶JavaScript:کلمات کلیدی Break و Continue در جاوااسکریپت
۳۷JavaScript:تبدیل نوع داده‌ها در جاوااسکریپت
۳۸JavaScript:عملیات‌های بیتی در جاوااسکریپت
۳۹JavaScript:عبارات با قاعده در جاوااسکریپت
۴۰JavaScript:خطاها در جاوااسکریپت - رخ دادن خطا و رفع آن
۴۱JavaScript:Scope در جاوااسکریپت
۴۲JavaScript:Hoisting یا جا به جایی کدها در جاوااسکریپت
۴۳JavaScript:استفاده از مد یا حالت سخت‌گیرانه (use strict) در جاوااسکریپت
۴۴JavaScript:کلمه کلیدی This در جاوااسکریپت
۴۵JavaScript:کلمه کلیدی Let در جاوااسکریپت
۴۶JavaScript:ثابت‌ها در جاوااسکریپت
۴۷JavaScript:تعریف توابع به صورت پیکان
۴۸JavaScript:کلاس‌ها در جاوااسکریپت
۴۹JavaScript:اشکال‌زدایی در جاوااسکریپت
۵۰JavaScript:راهنمای استایل و استانداردهای کدنویسی در جاوااسکریپت
۵۱JavaScript:بهترین تمرینات جاوااسکریپت
۵۲JavaScript:اشتباهات رایج در برنامه‌نویسی جاوااسکریپت
۵۳JavaScript:کارایی در جاوااسکریپت
۵۴JavaScript:کلمات رزرو شده در جاوااسکریپت
۵۵JavaScript:ورژن‌های جاوااسکریپت
۵۶JavaScript:ECMAScript 5 - JavaScript 5
۵۷JavaScript:ECMAScript 6 - ECMAScript 2015
۵۸JavaScript:جیسون (JSON) در جاوااسکریپت
---

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

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

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

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

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

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

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


اپرا سافاری فایرفاکس اینترنت اکسپلور کروم دستور
۱۲٫۱ ۶٫۰ ۴٫۰ ۱۰٫۰ ۱۳٫۰ "use strict"


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


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

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

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

مثال

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

مثال

"use strict";
myFunction();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

"use strict";
var 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


منابع آموزشی