javascriptfor...ofحلقه for...of در جاوااسکریپت
با for...of در جاوااسکریپت مقدارهای آرایه را مستقیم بخوانید؛ تفاوت آن با for...in، کاربرد const و خروج زودهنگام با break را بشناسید.
مفهوم به زبان ساده
وقتی به مقدارهای یک فهرست نیاز دارید و شمارندهٔ عددی هدف اصلی نیست، for...of پیمایش را ساده میکند. در هر دور، مقدار بعدی به متغیر حلقه داده میشود. آرایه و رشته نمونههایی از دادهٔ پیمایشپذیر یا iterable هستند. این ساختار برای هر شیء دلخواه بهصورت خودکار کار نمیکند؛ یک شیء معمولی با چند ویژگی لزوماً iterable نیست.
در مثال، amount در هر دور یکی از عددهای آرایه است و به total افزوده میشود. استفاده از const مجاز است، زیرا برای هر دور اتصال تازهای ساخته میشود؛ قرار نیست در همان دور به amount دوباره مقدار بدهیم. اگر خود مقدار یک شیء باشد، const باز هم جلوی تغییر ویژگیهای آن شیء را نمیگیرد. برای دریافت اندیس همراه مقدار، میتوانید بعداً entries را بررسی کنید یا از #for-loop استفاده کنید.
for...of را با for...in اشتباه نگیرید. اولی از مقدارهای iterable میگذرد؛ دومی نام ویژگیهای شمارشپذیر را پیمایش میکند و برای خواندن اعضای آرایه به همین شیوه مناسب نیست. break پیمایش را زودتر پایان میدهد و continue به مقدار بعدی میرود. اگر قرار است از هر عضو خروجی تازه بسازید، #map نیز گزینهای معنادار است؛ اگر فقط جمع یا کنترل گامبهگام میخواهید، حلقه میتواند روشنتر باشد. انتخاب ابزار باید از کاری که لازم دارید بیاید، نه از کوتاهی ظاهری کد.
کجا به کار میآید؟
- جمع مبلغها بدون نیاز به نگهداری اندیس
- خواندن نام درسها یا بررسی ردیفها با امکان break
از تعریف تا یک مثال واقعی
const amounts = [40000, 60000, 20000];
let total = 0;
for (const amount of amounts) {
total += amount;
}
console.log(total);
for (const title of ['مبانی', 'تمرین', 'پروژه']) {
console.log(title);
if (title === 'تمرین') break;
}
120000 مبانی تمرین
این مثال چطور کار میکند؟
حلقهٔ اول سه مبلغ را بهترتیب در amount قرار میدهد.
total پس از سه دور ۱۲۰۰۰۰ میشود؛ آرایهٔ اصلی تغییر نمیکند.
حلقهٔ دوم ابتدا مبانی و سپس تمرین را چاپ میکند.
در عنوان تمرین، break اجرا میشود و پروژه دیگر چاپ نمیشود.
اشتباه رایج
در for...of مقدار عضو را میگیرید، نه اندیس را. استفاده از آن مقدار بهعنوان amounts[amount] معمولاً اشتباه است. یک شیء معمولی را هم بدون تبدیل مناسب نمیتوان با این حلقه پیمایش کرد.
این را به خاطر بسپارید
for...of برای مقدارهای iterable است؛ اگر فقط مقدار لازم دارید، شمارندهٔ اضافی نسازید.