بررسی ارسال نشدن یک ورودی به تابع در جاوا اسکریپت

در زبان جاوا اسکریپت، امکان این وجود دارد که از ارسال بقیه‌ی ورودی‌‌ها به داخل تابع صرف نظر کرده و با این حال، آن تابع فراخوانی شود! یعنی آنکه مثلا اگر تابعی سه ورودی دریافت کند، بجای ارسال هر سه، فقط یک یا دو مورد اول را ارسال کرده و مورد سوم را ارسال نکنیم! در این شرایط، ممکن است نیاز باشد که داخل تابع بررسی شود که آیا این آرگومان به آن ارسال شده است یا خیر! تا درصورت ارسال نشدن، مقدار پیشفرضی برای آن در نظر گرفته شود. (البته در نسخه‌ی جدید جاوا اسکریپت، امکان تعریف مقدار پیشفرضی برای آرگومان‌های ورودی یک تابع وجود دارد؛ اما اگر نخواهید از نسخه‌‌های جدید استفاده کنید، بایستی به روشی اقدام به تشخیص ارسال نشدن ورودی‌ها به تابع نمایید که در این پست به بررسی این روش‌ها می‌پردازیم.)

مثال زیر را در نظر بگیرید:

function test(arg1, arg2) {
      console.log(arg1);
      console.log(arg2);
}

test("FuLLKade");

همانطور که مشاهده می‌کنید، مقدار arg2 ارسال نشده است و بایستی داخل تابع بررسی شود که اگر وجود نداشت، از چاپ آن صرف نظر گردد.

از روش‌های زیر می‌توان برای بررسی اینکه آیا این مقدار تعریف نشده است استفاده کرد:

if (arg2 === undefined) { // ارسال نشده است }
if (arg2 === 'undefined') { // ارسال نشده است }

اما مشکلی که وجود دارد این است که ممکن است مقدار پارامتر ارسال شود؛ ولی واقعا undefined برای مقدار آن ارسال شده باشد! که در این صورت شاید بخواهید به نحوی این مورد را تشخیص دهید.

راه حل استفاده از arguments.length برای بررسی تعداد ورودی‌های ارسال شده به تابع است. به مثال زیر توجه کنید:

function test(requiredArg, optionalArg1, optionalArg2, optionalArg3) {
    switch(arguments.length) {
        case 1: optionalArg1 = 'default1';
        case 2: optionalArg2 = 'default2';
        case 3: optionalArg3 = 'default3';
        case 4: break;
        default: throw new Error('illegal argument count')
    }
    // do stuff
}

در اینجا، طول آرگومان‌های ارسال شده بررسی شده است؛ پس اگر یکی از آنها ارسال شده باشد، تمامی آرگومان‌های بعدی، مقدار پیشفرضی خواهند گرفت و اگر دو مورد اول ارسال شده باشد، از دو آرگومان به بعد مقدار پیشفرض خواهند گرفت. در کد بالا، برای شروط switch، از break استفاده نشده است تا مثلا اگر 1 بود، بقیه نیز اجرا شوند.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

cp-codfk

نظرات ثبت شده بدون دیدگاه

توضیحات پیشنهادی نظرات اشتراک