حالت سختگیرانه در جاوا اسکریپت چیست؟ با مثال توضیح داده شده است
![](https://khabarkaav.ir/wp-content/uploads/2024/02/Screenshot-2024-02-01-at-8.20.00-AM.png)
اگر توسعهدهنده جاوا اسکریپت هستید، ممکن است با رشته «استفاده سخت» در بالای کد جاوا اسکریپت خود مواجه شوید. این به این معنی است که حالت سخت جاوا اسکریپت در حال استفاده است. اما این به چه معناست و چرا اهمیت دارد؟
در این مقاله، معنی نوشتن کد جاوا اسکریپت در حالت سخت و نحوه فعال کردن آن را خواهید آموخت. این مقاله همچنین برخی از مزایای استفاده از حالت سخت و چند مثال را پوشش می دهد که تفاوت آن با جاوا اسکریپت معمولی را نشان می دهد.
فهرست مطالب
حالت سختگیرانه در جاوا اسکریپت چیست؟
نحوه استفاده از حالت سختگیرانه در جاوا اسکریپت
تفاوت بین حالت سختگیرانه و جاوا اسکریپت معمولی
ویژگی های جاوا اسکریپت که به صورت پیش فرض از حالت سختگیرانه استفاده می کنند
حالت سختگیرانه در جاوا اسکریپت چیست؟
حالت سختگیرانه یک ویژگی در جاوا اسکریپت است که در ECMAScript 5 معرفی شده است. به شما امکان می دهد کد را به گونه ای بنویسید که از قوانین سخت گیرانه پیروی کند.
هنگامی که حالت سخت فعال است، موتور جاوا اسکریپت محدودیت های اضافی را اعمال می کند. این بدان معناست که ممکن است بتوانید برخی از خطاهای رایج را که در غیر این صورت مورد توجه قرار نمیگرفتند، پیدا کنید. همچنین به شما کمک می کند کدهای پاک تر و ایمن تر بنویسید.
نحوه استفاده از حالت سختگیرانه در جاوا اسکریپت
شما می توانید از حالت سخت جاوا اسکریپت به دو صورت استفاده کنید. شما می توانید حالت سخت را برای کل فایل جاوا اسکریپت فعال کنید یا می توانید آن را در محدوده یک تابع فعال کنید.
برای فعال کردن حالت سخت برای کل فایل جاوا اسکریپت، به سادگی رشته "use strict"
به بالای کد خود اضافه کنید.
"use strict" // Your code goes here...
برای توابع، میتوانید با قرار دادن رشته "use strict"
در بالای بدنه تابع، حالت سخت را فعال کنید.
function myFunction() { "use strict" // Function body goes here... }
شما باید رشته "use strict"
را در بالای فایل یا بدنه تابع قرار دهید. در غیر این صورت کار نخواهد کرد.
اما شما مجاز به اضافه کردن نظرات در بالای رشته "use strict"
هستید. به غیر از نظرات، هر چیز دیگری باید در زیر "use strict"
باشد تا کار کند.
تفاوت بین حالت سختگیرانه و جاوا اسکریپت معمولی
حال، بیایید برخی از قوانینی را که حالت سخت اعمال میکند و هنگام نوشتن کد در جاوا اسکریپت معمولی اجرا نمیشوند، ببینیم.
استفاده از یک متغیر اعلام نشده
هنگام نوشتن کد جاوا اسکریپت در حالت سخت، باید همه متغیرها و اشیاء را قبل از استفاده اعلام کنید. این مفید است زیرا به جلوگیری از ایجاد متغیرهای سراسری به طور تصادفی کمک می کند که می تواند منجر به اشکال شود.
در اینجا یک مثال است
// Regular JavaScript function regularFunc() { username = "Marie" console.log(username) } regularFunc()
![اسکرین شات-2024-02-01-at-8.20.00-AM](https://www.freecodecamp.org/news/content/images/2024/02/Screenshot-2024-02-01-at-8.20.00-AM.png)
// Strict mode function strictFunc() { "use strict" username = "Marie" console.log(username) } strictFunc()
![اسکرین شات-2024-02-02-at-7.07.08-AM](https://www.freecodecamp.org/news/content/images/2024/02/Screenshot-2024-02-02-at-7.07.08-AM.png)
در تابع regularFunc
، مرورگر username
بدون هیچ خطایی در کنسول ثبت می کند.
اما با تابع strictFunc
که از حالت سخت استفاده می کند، یک خطای مرجع ایجاد می کند.
دلیلش این است که متغیر username
اعلان نشده است. و حالت سخت اجازه استفاده از متغیرها را قبل از اعلام آنها نمی دهد.
کپی کردن نام پارامتر
در حالت غیر دقیق، کپی کردن نام پارامتر در یک تابع مجاز است. فقط آخرین نمونه از موارد تکراری مجاز است در حالی که بقیه موارد نادیده گرفته می شوند.
اما عملکردهای حالت سخت این اجازه را نمی دهد. در موارد تکراری یک خطای نحوی ایجاد می کند.
در اینجا یک مثال است:
function addNums (num, num) { console.log(num + num) } addNums(2, 3) // 6
در مثال بالا، اولین پارامتر num
نادیده گرفته شده است. فقط دومی استفاده می شود. به همین دلیل است که توابع 6 را برمی گرداند زیرا 3 + 3 6 است.
اما وقتی پارامترهای یکسانی را در یک تابع با استفاده از حالت سخت تعریف میکنید، نمیتوانید آن را اجرا کنید زیرا یک خطای نحوی ایجاد میکند. حالت سختگیرانه نیاز دارد که هر پارامتر یک نام منحصر به فرد داشته باشد.
function addNums (num, num) { "use strict" console.log(num + num) } addNums(2, 3)
![اسکرین شات-2024-02-02-at-9.15.07-AM](https://www.freecodecamp.org/news/content/images/2024/02/Screenshot-2024-02-02-at-9.15.07-AM.png)
استفاده از کلمات کلیدی رزرو شده آینده
در جاوا اسکریپت، برخی از کلمات کلیدی برای استفاده احتمالی در آینده رزرو شده است. و استفاده از این کلمات کلیدی به عنوان شناسه (مانند متغیرها یا نام توابع) ممکن است در آینده مشکلاتی ایجاد کند.
به عنوان مثال، package
یکی از این کلمات کلیدی است. وقتی از حالت سخت استفاده نمی کنید، می توانید از آن برای نامگذاری متغیرها و توابع استفاده کنید.
const package = "This is a package" console.log(package)
![اسکرین شات-2024-02-02-at-9.17.36-AM](https://www.freecodecamp.org/news/content/images/2024/02/Screenshot-2024-02-02-at-9.17.36-AM.png)
حالت سخت گیرانه اجازه استفاده از این کلمات کلیدی رزرو شده را نمی دهد. این امر سازگاری با نسخه های بعدی جاوا اسکریپت را تضمین می کند.
"use strict" const package = "This is a package" console.log(package)
![اسکرین شات-2024-02-02-at-9.22.21-AM](https://www.freecodecamp.org/news/content/images/2024/02/Screenshot-2024-02-02-at-9.22.21-AM.png)
سایر کلمات کلیدی رزرو شده در آینده عبارتند از:
implements
interface
private
protected
public
static
yield
arguments
استفاده از ویژگی های منسوخ شده
حالت سختگیرانه استفاده از آپشن های منسوخ شده جاوا اسکریپت مانند arguments.caller
، arguments.callee
و غیره را محدود میکند.
این موارد به دلیل نگرانیهای امنیتی و عملکرد غیرمجاز هستند. اما حالت غیر دقیق اجازه استفاده از آنها را می دهد.
بیایید نمونه ای از استفاده از arguments.caller
را در حالت سخت و غیر دقیق ببینیم.
// non-strict mode function outerFunction() { innerFunction(); } function innerFunction() { console.log(innerFunction.caller); // Example of .caller } outerFunction();
![اسکرین شات-2024-02-02-at-10.18.11-AM](https://www.freecodecamp.org/news/content/images/2024/02/Screenshot-2024-02-02-at-10.18.11-AM.png)
arguments.caller
در حالت غیر دقیق و بدون هیچ خطایی کار می کند. استفاده از .caller
در innerFunction
، outerFunction
را ثبت می کند که تابع داخلی را به کنسول فراخوانی می کند. در حالت غیر دقیق به خوبی کار می کند.
اما استفاده از آن در حالت سخت باعث می شود که جاوا اسکریپت مانند مثال زیر خطایی ایجاد کند.
"use strict" function outerFunction() { innerFunction(); } function innerFunction() { console.log(innerFunction.caller); // Example of .caller } outerFunction();
![اسکرین شات-2024-02-02-at-10.23.14-AM](https://www.freecodecamp.org/news/content/images/2024/02/Screenshot-2024-02-02-at-10.23.14-AM.png)
واگذاری به یک ویژگی فقط خواندنی
در حالت غیر دقیق، زمانی که سعی می کنید یک مقدار جدید به یک ویژگی فقط خواندنی اختصاص دهید، انتساب مقدار ویژگی را تغییر نمی دهد. اما هیچ خطایی ایجاد نخواهد کرد. در عوض، انتساب بی سر و صدا با شکست مواجه می شود و دارایی ارزش اصلی خود را حفظ می کند.
const obj = {} Object.defineProperty(obj, 'key', { value: 10, writable: false }) obj.key = 20 console.log(obj.key)
![اسکرین شات-2024-02-02-at-11.23.16-AM](https://www.freecodecamp.org/news/content/images/2024/02/Screenshot-2024-02-02-at-11.23.16-AM.png)
object.key
این مثال یک obj
خالی جدید را تعریف می کند. و با استفاده از Object.defineProperty
، یک key
ویژگی جدید به obj
اضافه می شود. این ویژگی key
به عنوان یک ویژگی فقط خواندنی تنظیم شده است.
همانطور که از نتیجه log می بینید، هنگام به روز رسانی مقدار key
هیچ خطایی وجود ندارد. و ویژگی key
مقدار اصلی 10
را حفظ می کند.
با این حال، در حالت سخت، تلاش برای به روز رسانی مقدار ویژگی منجر به TypeError
می شود. این اجرای دقیقتر به تشخیص زودهنگام خطاهای احتمالی کمک میکند.
"use strict" const obj = {} Object.defineProperty(obj, 'key', { value: 10, writable: false }) obj.key = 20 console.log(obj.key)
![اسکرین شات-2024-02-02-at-11.43.54-AM](https://www.freecodecamp.org/news/content/images/2024/02/Screenshot-2024-02-02-at-11.43.54-AM.png)
ویژگی های جاوا اسکریپت که به صورت پیش فرض از حالت سختگیرانه استفاده می کنند
برخی از ویژگی های جاوا اسکریپت نیازی به فراخوانی صریح "use strict"
ندارند. به طور پیش فرض، حالت سخت برای جلوگیری از خطاهای رایج و اطمینان از سازگاری با نسخه های جاوا اسکریپت آینده اعمال می شود.
نمونه هایی از این زمینه ها عبارتند از:
کلاس های ES6
ماژول های ES6
توابع پیکان
برچسبگذاری شده با واژههای قالب
نتیجه
جاوا اسکریپت به عنوان زبانی برای گفت ن تعامل ساده به صفحات وب شروع شد. اما از آن زمان تاکنون به یکی از پرکاربردترین زبان های برنامه نویسی برای ایجاد برنامه های کاربردی ساده و پیچیده تبدیل شده است.
با تکامل زبان، برخی از نقص های قدیمی آن هنوز باقی مانده است. ویژگی حالت سخت به توسعه دهندگان جاوا اسکریپت کمک می کند تا با برخی از مشکلاتی که این نقص ها ایجاد می کنند مقابله کنند.
در این مقاله، با حالت سخت، نحوه استفاده از آن و تفاوت آن با نوشتن کد جاوا اسکریپت در حالت غیر دقیق آشنا شدید. شما همچنین زمینه های مختلفی را در جاوا اسکریپت یاد گرفته اید که در آن قوانین حالت سختگیرانه به طور پیش فرض اعمال می شوند.
با تشکر برای خواندن. و کد نویسی مبارک! برای آموزش های عمیق تر، در کانال YouTube من مشترک شوید.
ارسال نظر