للفيس تخطي معلمات الوظيفة الاختيارية في JavaScript




كود جافا سكريبت لعرض الصور (3)

هل يمكن أن تشير لي إلى طريقة لطيفة لتخطي المعلمات الاختيارية في جافا سكريبت.

على سبيل المثال ، أريد التخلص من جميع المعلمات opt_ هنا:

goog.net.XhrIo.send(url, opt_callback, opt_method, opt_content, {'Cache-Control': 'no-cache'}, opt_timeoutInterval)

حل:

goog.net.XhrIo.send(url, undefined, undefined, undefined, {'Cache-Control': 'no-cache'})

يجب عليك استخدام undefined بدلاً من المعلمة الاختيارية التي تريد تخطيها ، لأن هذا 100٪ يحاكي القيمة الافتراضية للمعلمات الاختيارية في JavaScript.

مثال صغير:

myfunc(param);

//is equivalent to

myfunc(param, undefined, undefined, undefined);

توصية قوية : استخدم JSON إذا كان لديك الكثير من المعلمات ، ويمكن أن يكون لديك معلمات اختيارية في منتصف قائمة المعلمات. انظر كيف يتم ذلك في jQuery .


اجابة قصيرة

الرهان الأكثر أمانًا غير undefined ، ويجب أن يعمل في كل مكان تقريبًا. في النهاية ، على الرغم من ذلك ، لا يمكنك خداع الوظيفة التي يتم استدعاؤها في التفكير أنك حذفت حقًا المعلمة.

إذا وجدت نفسك يميل نحو استخدام null لمجرد أنه أقصر ، ففكر في الإعلان عن متغير اسمه _ باعتباره اختصارًا لطيفًا undefined :

(function() { // First line of every script file
    "use strict";
    var _ = undefined; // For shorthand
    // ...
    aFunction(a, _, c);
    // ...
})(); // Last line of every script

تفاصيل

أولاً ، اعلم أن:

  • typeof undefined يقيم إلى "undefined"
  • typeof null يقيم إلى "object"

لنفترض إذن أن الدالة تأخذ حجة تتوقع أن تكون من النوع "number" . إذا قدمت قيمة null ، فأنت تعطيها "object" . الدلالات هي خارج. 1

بينما يواصل المطورون كتابة شفرة جافا سكريبت القوية بشكل متزايد ، هناك فرصة متزايدة لأن تقوم الوظائف التي تتصل بها بالتحقق بوضوح من قيمة المعلمة if (aParam) {...} بدلاً من الكلاسيكية if (aParam) {...} . ستكون على أرض مهزوزة إذا استمرت في استخدام null بالتبادل مع undefined لمجرد أنهما يحدثان للإكراه على false .

ومع ذلك ، عليك أن تدرك أنه من الممكن في الواقع أن تعرف الدالة ما إذا تم حذف المعلمة بالفعل (مقابل undefined على undefined ):

f(undefined); // Second param omitted
function f(a, b) {
    // Both a and b will evaluate to undefined when used in an expression
    console.log(a); // undefined
    console.log(b); // undefined
    // But...
    console.log("0" in arguments); // true
    console.log("1" in arguments); // false
}

الحواشي

  1. على الرغم من أن undefined ليس من النوع "number" ، إلا أن المهمة برمتها تتمثل في أن يكون نوعًا لا يمثل نوعًا حقًا. هذا هو السبب في أنها القيمة المفترضة للمتغيرات غير المهيأة ، وقيمة الإرجاع الافتراضية للوظائف.

مجرد تمرير null كقيمة المعلمة.

تمت الإضافة: يمكنك أيضًا تخطي جميع المعلمات الاختيارية الناتجة بعد آخر ما تريد تمرير قيمة حقيقية (في هذه الحالة ، يمكنك تخطي المعلمة opt_timeoutInterval على الإطلاق)





function-parameter