arguments (مدیریت ورودیهای بینام و نشان!)در جاوااسکریپت، تمام ورودیهایی (آرگومانهایی) که به یک تابع پاس میدی، در یک شیء مخصوص به نام arguments ذخیره و نگهداری میشن. این شیء شبیه به یک آرایه عمل میکنه و میتونی با کمک شماره ایندکس (که از صفر شروع میشه) به تکتک ورودیها دسترسی داشته باشی:
arguments[i];
مثلاً arguments[0] به اولین ورودی، arguments[1] به دومین ورودی و... اشاره میکنه. تعداد کل ورودیهای فرستاده شده رو هم میتونی با ویژگی arguments.length به دست بیاری.
بزرگترین مزیت arguments اینه که بهت اجازه میده یک تابع رو با تعداد ورودیهای بیشتری نسبت به چیزی که موقع تعریف تابع مشخص کردی، صدا بزنی! این قابلیت زمانی به دادت میرسه که از قبل دقیقاً نمیدونی کاربر قراره چندتا ورودی به تابت بفرسته.
بیا تابعی بسازیم که یک علامت جداکننده (Separator) میگیره و بعد تمام کلمات بعدی رو با اون علامت به هم میچسبونه. موقع تعریف تابع، ما فقط یک پارامتر رسمی به نام separator براش مینویسیم، اما موقع استفاده هر چقدر دلمان خواست کلمه بهش پاس میدیم:
function myConcat(separator) {
let result = ""; // ساخت یک متن خالی برای ذخیره نتیجه
// حلقه رو از ایندکس ۱ شروع میکنیم، چون ایندکس ۰ همان separator خودمان است
for (let i = 1; i < arguments.length; i++) {
result += arguments[i] + separator;
}
return result;
}
حالا ببین چطور میتونی این تابع رو با هر تعداد ورودی که دوست داری صدا بزنی:
// مثال اول: چسباندن رنگها با کاما
console.log(myConcat(", ", "red", "orange", "blue"));
// خروجی: "red, orange, blue, "
// مثال دوم: چسباندن اسم حیوانات با نقطه ویرگول
console.log(myConcat("; ", "elephant", "giraffe", "lion", "cheetah"));
// خروجی: "elephant; giraffe; lion; cheetah; "
// مثال سوم: چسباندن ادویهها با نقطه
console.log(myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley"));
// خروجی: "sage. basil. oregano. pepper. parsley. "
arguments آرایه نیست!حواست باشه، هر جا صحبت از شیء arguments میشه، میگن "شبهِ آرایه" (Array-like). یعنی درست مثل آرایه ایندکس عددی و ویژگی length رو داره، اما یک آرایه واقعی نیست! این یعنی تو نمیتونی متدهای خفن و پیشفرض آرایهها (مثل map() ،filter() ،forEach() یا pop()) رو مستقیم روی arguments صدا بزنی، چون اصلاً این متدها رو بلد نیست. (البته در نسخههای مدرن جاوااسکریپت، قابلیت خفنی به نام Rest Parameters معرفی شده که کار با ورودیهای نامحدود رو به شکل یک آرایه واقعی در میاره و جلوتر بهش میرسیم).
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://developer.mozilla.org/en-US/docs/Web/JavaScript