ඔව් මෙය පෙරනිමි පරාමිතියක් ලෙස හැඳින්වේ
පෙරනිමි ශ්රිත පරාමිතීන් කිසිදු අගයක් හෝ නිර්වචනය කර නොමැති නම් විධිමත් පරාමිතීන් පෙරනිමි අගයන් සමඟ ආරම්භ කිරීමට ඉඩ දෙයි.
වාක්ය ඛණ්ඩය:
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);