हाँ यह एक डिफ़ॉल्ट पैरामीटर के रूप में जाना जाता है
यदि कोई मान या अपरिभाषित पास नहीं है, तो डिफ़ॉल्ट फ़ंक्शन पैरामीटर औपचारिक मानों को डिफ़ॉल्ट मानों के साथ आरंभ करने की अनुमति देता है।
वाक्य - विन्यास:
function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
statements
}
विवरण:
कार्य के पैरामीटर डिफ़ॉल्ट के लिए अपरिभाषित हालांकि, स्थितियों में यह एक अलग डिफ़ॉल्ट मान सेट करने के लिए उपयोगी हो सकता है। यह वह जगह है जहां डिफ़ॉल्ट पैरामीटर मदद कर सकता है।
अतीत में, चूक की स्थापना के लिए सामान्य रणनीति फ़ंक्शन के शरीर में पैरामीटर मानों का परीक्षण करना और अपरिभाषित होने पर मान असाइन करना था। यदि कॉल में कोई मूल्य प्रदान नहीं किया जाता है, तो इसका मूल्य अपरिभाषित होगा। आपको यह सुनिश्चित करने के लिए एक सशर्त जांच सेट करना होगा कि पैरामीटर अपरिभाषित नहीं है
ES2015 में डिफ़ॉल्ट मापदंडों के साथ, फ़ंक्शन बॉडी में चेक अब आवश्यक नहीं है। अब आप केवल फंक्शन हेड में एक डिफ़ॉल्ट मान रख सकते हैं।
मतभेदों का उदाहरण:
// OLD METHOD
function multiply(a, b) {
b = (typeof b !== 'undefined') ? b : 1;
return a * b;
}
multiply(5, 2); // 10
multiply(5, 1); // 5
multiply(5); // 5
// NEW METHOD
function multiply(a, b = 1) {
return a * b;
}
multiply(5, 2); // 10
multiply(5, 1); // 5
multiply(5); // 5
विभिन्न सिंटैक्स उदाहरण:
अन्य मिथ्या मूल्यों के बिना अपरिभाषित पैडिंग:
भले ही कॉल करते समय मूल्य स्पष्ट रूप से सेट किया गया हो, लेकिन संख्या तर्क का मान डिफ़ॉल्ट होता है।
function test(num = 1) {
console.log(typeof num);
}
test(); // 'number' (num is set to 1)
test(undefined); // 'number' (num is set to 1 too)
// test with other falsy values:
test(''); // 'string' (num is set to '')
test(null); // 'object' (num is set to null)
कॉल समय पर मूल्यांकन:
डिफ़ॉल्ट तर्क का मूल्यांकन कॉल समय पर किया जाता है, इसलिए कुछ अन्य भाषाओं के विपरीत, फ़ंक्शन को कॉल करने पर हर बार एक नई वस्तु बनाई जाती है।
function append(value, array = []) {
array.push(value);
return array;
}
append(1); //[1]
append(2); //[2], not [1, 2]
// This even applies to functions and variables
function callSomething(thing = something()) {
return thing;
}
function something() {
return 'sth';
}
callSomething(); //sth
डिफ़ॉल्ट पैरामीटर बाद के डिफ़ॉल्ट मापदंडों के लिए उपलब्ध हैं:
पहले से सामने आए पैरामीटर बाद के डिफ़ॉल्ट मापदंडों के लिए उपलब्ध हैं
function singularAutoPlural(singular, plural = singular + 's',
rallyingCry = plural + ' ATTACK!!!') {
return [singular, plural, rallyingCry];
}
//["Gecko","Geckos", "Geckos ATTACK!!!"]
singularAutoPlural('Gecko');
//["Fox","Foxes", "Foxes ATTACK!!!"]
singularAutoPlural('Fox', 'Foxes');
//["Deer", "Deer", "Deer ... change."]
singularAutoPlural('Deer', 'Deer', 'Deer peaceably and respectfully \ petition the government for positive change.')
फ़ंक्शन बॉडी के अंदर परिभाषित कार्य:
गेको 33 (फ़ायरफ़ॉक्स 33 / थंडरबर्ड 33 / सीमोंकी 2.30) में पेश किया गया। फ़ंक्शन बॉडी में घोषित किए गए फ़ंक्शंस को डिफ़ॉल्ट मापदंडों के अंदर नहीं भेजा जा सकता है और एक रेफ़रर्रर (वर्तमान में स्पाइडरमॉन्की में एक टाइपर, बग 1022967 देखें) फेंक सकते हैं। डिफ़ॉल्ट मापदंडों को हमेशा पहले निष्पादित किया जाता है, फ़ंक्शन बॉडी के अंदर फ़ंक्शन घोषणाएं बाद में मूल्यांकन करते हैं।
// Doesn't work! Throws ReferenceError.
function f(a = go()) {
function go() { return ':P'; }
}
डिफ़ॉल्ट मापदंडों के बाद चूक के बिना पैरामीटर:
जेको 26 (फ़ायरफ़ॉक्स 26 / थंडरबर्ड 26 / सीमॉन्की 2.23 / फ़ायरफ़ॉक्स ओएस 1.2) से पहले, निम्न कोड के परिणामस्वरूप सिंटैक्सएर्रर हुआ। यह बग 777060 में तय किया गया है और बाद के संस्करणों में अपेक्षा के अनुरूप काम करता है। पैरामीटर अभी भी बाएं से दाएं सेट हैं, डिफ़ॉल्ट मापदंडों पर ओवरराइटिंग करते हैं, भले ही बाद में चूक के बिना पैरामीटर हों।
function f(x = 1, y) {
return [x, y];
}
f(); // [1, undefined]
f(2); // [2, undefined]
डिफ़ॉल्ट मान असाइनमेंट के साथ विनाशकारी पैरा:
आप डिस्ट्रक्टिंग असाइनमेंट नोटेशन के साथ डिफॉल्ट वैल्यू असाइनमेंट का उपयोग कर सकते हैं
function f([x, y] = [1, 2], {z: z} = {z: 3}) {
return x + y + z;
}
f(); // 6
function defaultFor(arg, val) { return typeof arg !== 'undefined' ? arg : val; }
और फिर आप इसे इस प्रकार कह सकते हैंa = defaultFor(a, 42);