for...in (چرخیدن در دلِ ویژگیهای یک شیء)حلقه for...in یک ابزار عالی برای گشتوگذار داخل شیءها (Objects) هست. این حلقه به تکتکِ کلیدها یا ویژگیهای قابلشمارش (Enumerable Properties) یک شیء سر میزنه و کدهایی که مشخص کردی رو روشون اجرا میکنه.
ساختار کلی این حلقه به این صورت هست:
for (variable in object) {
// کدهایی که برای هر ویژگی (کلید) اجرا میشن
}
فرض کن تابعی داری که میخواد تمام اطلاعات داخل یک شیء رو بیرون بکشه و به صورت متن تحویلت بده:
function dumpProps(obj, objName) {
let result = "";
// متغیر i در هر دور، نامِ یکی از کلیدهای شیء رو به خودش میگیره
for (const i in obj) {
result += `${objName}.${i} = ${obj[i]}<br>`;
}
result += "<hr>";
return result;
}
حالا اگر یک شیء به اسم car داشته باشیم که مشخصاتش اینها باشن: make: "Ford" و model: "Mustang"، خروجی این تابع اینطوری میشه:
car.make = Ford
car.model = Mustang
for...in برای آرایهها استفاده نکن!وقتی چشمت به حلقه for...in میافته، شاید وسوسه بشی که ازش برای چرخیدن بین آیتمهای یک آرایه (Array) هم استفاده کنی؛ چون ایندکسهای آرایه هم یه جورایی شبیه به کلیدهای شیء هستند. اما این یک تله بزرگ است!
چرا نباید این کار رو بکنیم؟ اگر تو یا یک کتابخانه جانبی، بعداً ویژگی یا متد دستسازی به ساختار آن آرایه اضافه کنید، حلقه for...in علاوه بر شماره ایندکسهای عددی آرایه (مثل 0, 1, 2)، میره و اسم اون ویژگیهای دستساز رو هم برمیگردونه و کل محاسبات یا خروجی کدت رو خراب میکنه!
بهترین روش (Best Practice): برای چرخیدن بین آیتمهای آرایه، همیشه از همان حلقه سنتی
forعددی (یا حلقههای مدرنتری مثلfor...ofکه جلوتر میبینیم) استفاده کن تا خیالت راحت باشه که فقط داری روی اعضای اصلی آرایه چرخ میزنی.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://developer.mozilla.org/en-US/docs/Web/JavaScript