با سلام به شما دوستای عزیز ، امیدوارم که خوب باشید. باآموزش عبارت متنی “use strict” Directive- JavaScript درخدمتتون هستم.عبارت متنی “use strict” بیانگر این مسئله است که کدهای زبان جاوا اسکریپت باید در “strict mode” اجرا شوند. هدف اصلی استفاده از این حالت، انجام بررسی و checking مضاعف می باشد.

“use strict” Directive

Directive نام برده یک قابلیت نوین است که در ویرایش ۱٫۸٫۵ جاوا اسکریپت (ECMAScript نسخه ی ۵) معرفی شد.

لازم به ذکر است که “use strict” directive یک دستور نیست بلکه یک عبارت متنی (literal expression) است که توسط ویرایش های پیشین جاوا اسکریپت کاملا نادیده گرفته می شود.

هدف از درج عبارت “use strict” در بالای کد (و پیش از نوشتن هر کد دیگر) این است که به زبان جاوا اسکریپت دستور بدیم در حالت “strict mode” کدها را اجرا کند.

در حالت strict mode دیگر امکان استفاده از متغیرهای اعلان شده وجود ندارد.

Strict Mode در مرورگر IE از نسخه ی ۱۰ به بعد، در Firefox از ورژن ۴ به بعد، در Chrome از ویرایش ۱۳ و در مرورگرهای Safari و Opera به ترتیب از نسخه های ۵٫۱ و ۱۲ به بعد پشتیبانی می شود.

نحوه ی تعریف Strict Mode

می توان با درج یا افزودن عبارت متنی “use strict” به ابتدای یک فایل یا تابع (function) جاوااسکریپت، این حالت (strict mode) را فعال کرد.

به این خاطر که strict mode را در ابتدای فایل جاوا اسکریپت اعلان می کنید، scope (حوزه) آن سراسری (global) خواهد بود. به عبارتی دیگر در پی اعلان strict mode در ابتدای کد، تمامی کدها در این حالت اجرا می شوند.

چنانچه strict mode در درون یک تابع اعلان کنید، scope (دامنه یا حوزه) آن نیز محلی خواهد بود، بدین معنا که تنها کد داخل تابع در این حالت اجرا می شود.

تعریف سراسری (global declaration)


نمونه یک
?
۱
۲

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

تعریف محلی (local declaration)

نمونه دو
?
۱
۲
۳
۴
۵
۶

“use strict”;
myFunction();

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

“use strict”؛ دستور نگارش (syntax)

نحوه ی نگارش اعلان strict mode به گونه ای طراحی و تعبیه شد که با ویرایش های قدیمی تر این زبان نیز سازگاری داشته باشد.

compile (ترجمه) یک numeric literal همچون (۴ + ۵;) و یا یک string literal مانند (“John Doe”;) در یک برنامه ی جاوا اسکریپت هیچگونه نتیجه ی سو و جانبی ندارد، به این معنا که تنها به یک متغیر non-existing ترجمه شده و در پی آن نابود می گردد.(numeric literal زمانی بکار می رود که مقادیر عددی در رشته ای از کاراکترها ذخیره شده باشد. String literal به نمایش یک مقدار رشته ای یا string value در سورس کد برنامه ی کامپیوتری گفته می شود.)

بنابراین directive مذکور تنها برای کامپایلرهای نوین معنی دارد که قابلیت درک و تفسیر آن را داشته باشند.

Literal به نشانه‌هایی در source code برنامه گفته می‌شود که در زمان کامپایل به مقادیر مشخصی تفسیر می‌شوند. به عبارت دیگر لفظ‌ها مقادیر ثابتی هستند که به صورت نشانه‌هایی در کد برنامه نوشته می‌شوند.

به چه منظور استفاده از Strict Mode توصیه می شود؟

با بهره گیری از این قابلیت می توان کدنویسی در جاوا اسکریپت را دقیق تر و همچنین به مراتب ایمن تر ساخت.

Strict Mode نحوه ی نگارش و syntax غیر استاندارد کدنویسی پیش از اعلان این حالت را خطاهایی بنیادی درنظر می گیرد.

به عنوان مثال، می توان به کد نویسی در حالت عادی زبان جاوا اسکریپت اشاره کرد که در آن اشتباه تایپ کردن یک اسم متغیر منجر به ایجاد یک متغیر سراسری جدید می شود. اما در حالت strict mode، همین امر باعث صدور یک پیغام خطا (throw exception) شده که در نهایت مانع از ایجاد یک متغیر سراسری به صورت تصادفی می شود.

در حالت عادی زبان جاوا اسکریپت، یک برنامه نویس در صورت تخصیص مقدار به خاصیت های non-writable هیچ گونه بازخورد یا پیغام خطایی دریافت نمی کند. اما در strict mode (حالت کدنویسی دقیق)، هرگونه انتساب مقداری به یک non-writable property، getter-only property، non-existing property، non-existing variable و یا یک non-existing object باعث صدور (ایجاد) پیغام خطا می شود.

مواردی که در strict mode مجاز نمی باشند.

استفاده از یک متغیر (خاصیت یا شی) بدون اینکه آن را از پیش اعلان کرده باشیم در حالت strict mode امکان پذیر نبوده و مجاز نمی باشد.

‎”use strict”;

x = 3.14; // This will cause an error (if x has not been declared)‎

حذف یک متغیر، تابع یا آرگومان مجاز نمی باشد.

‎”use strict”;

x = 3.14;

delete x; // This will cause an error‎

اعلان (تعریف) یک خاصیت (property) بیش از یکبار مجاز نمی باشد.

‎”use strict”;

var x = {p1:10, p1:20}; // This will cause an error‎

تکثیر یا استفاده ی مجدد از یک اسم پارامتر امکان پذیر نمی باشد.

‎”use strict”;

function x(p1, p1) {}; // This will cause an error‎

استفاده از Numeric literal(کاراکترهای عددی) مبنای ۸ (octal) و کاراکترهای گریز (escape characters) مجاز نمی باشد.

‎”use strict”;

var x = 010; // This will cause an error

var y = \010; // This will cause an error‎

نوشتن در read-only property (تغییر مقادیر خاصیت های فقط خواندنی و ثابت) مجاز نمی باشد.

‎”use strict”;

var obj = {};

obj.defineProperty(obj, “x”, {value:0, writable:false});

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

تغییر مقادیر خاصیت های get-only امکان پذیر نمی باشد.

‎”use strict”;

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

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

حذف یک undeletable property مجاز نمی باشد.

‎”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‎

در فراخوانی توابع مانند f()، this value یک شی سراسری محسوب می شد، اما در strict mode تعریف نشده/undefined تلقی می گردد.

کلید واژه های رزرو شده (future reserved keywords) مجاز نمی باشند. این کلید واژه ها عبارتند از

implements

interface

package

private

protected

public

static

field

۱۰۹