javascriptStrict modeحالت سختگیرانه در جاوااسکریپت
Strict mode در جاوااسکریپت بعضی خطاهای خاموش را آشکار میکند؛ محل use strict، رفتار ماژول و خطای تغییر دادهٔ قفلشده را با نمونه بشناسید.
مفهوم به زبان ساده
برخی عملیات در حالت معمول جاوااسکریپت ممکن است بدون رسیدن به نتیجه، بیسروصدا شکست بخورند. حالت سختگیرانه بخشی از این رفتارها را به خطای روشن تبدیل میکند و چند شکل مبهم نحو را هم محدود میسازد. این حالت غلطیاب کامل، بررسیکنندهٔ نوع یا تضمینکنندهٔ امنیت برنامه نیست؛ همچنان باید منطق، ورودی و نتیجه را آزمایش کنید.
برای یک اسکریپت معمولی یا تابع دارای پارامترهای ساده، رشتهٔ "use strict" باید در ابتدای بدنه و پیش از دستورهای عادی قرار گیرد. نوشتن آن وسط تابع، حالت اجرا را تغییر نمیدهد. ماژولهای جاوااسکریپت و بدنهٔ کلاسها از ابتدا سختگیرانهاند و به این دستور نیاز ندارند. رفتار تابع عادی دربارهٔ this نیز در این حالت تفاوت دارد؛ این موضوع را هنگام جداکردن روش از شیء بررسی کنید.
در نمونه، خودمان شیء تنظیمات را در سطح اول منجمد کردهایم. تلاش برای تغییر mode در تابع سختگیرانه TypeError میدهد؛ سپس مقدار قبلی چاپ میشود. هدف، آشکارشدن شکست است. پس از گرفتن خطا باید علت و عمل بعدی را تعیین کنید؛ خالیگذاشتن catch فقط فرصت تشخیص مشکل را از برنامهنویس میگیرد.
کجا به کار میآید؟
- آشکارکردن انتساب نامجاز به ویژگی غیرقابل تغییر
- فهمیدن تفاوت رفتار اسکریپت قدیمی با ماژول تازه
از تعریف تا یک مثال واقعی
function inspectStrictMode() {
'use strict';
const settings = Object.freeze({ mode: 'study' });
try {
settings.mode = 'play';
} catch (error) {
console.log(error instanceof TypeError);
}
console.log(settings.mode);
}
inspectStrictMode();
true study
این مثال چطور کار میکند؟
دستور آغاز تابع، بدنه را سختگیرانه میکند.
Object.freeze تغییر ویژگی سطح اول تنظیمات را محدود میکند.
انتساب نامجاز خطا میدهد و مقدار study حفظ میشود.
اشتباه رایج
قرار دادن use strict وسط بدنه اثر فعالسازی ندارد. همچنین افزودن آن داخل تابع دارای پارامتر پیشفرض، rest یا الگوی تجزیه، میتواند خطای نحوی ایجاد کند؛ حالت را در محدودهٔ بیرونی مناسب فعال کنید.
این را به خاطر بسپارید
حالت سختگیرانه شکست بعضی عملیات را آشکار میکند؛ مدیریت درست خطا و قرارداد داده همچنان لازم است.