Ya ini disebut sebagai parameter default
Parameter fungsi default memungkinkan parameter formal diinisialisasi dengan nilai default jika tidak ada nilai atau tidak terdefinisi.
Sintaksis:
function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
statements
}
Deskripsi:
Parameter fungsi default ke undefined Namun, dalam situasi mungkin berguna untuk menetapkan nilai default yang berbeda. Di sinilah parameter default dapat membantu.
Di masa lalu, strategi umum untuk menetapkan standar adalah dengan menguji nilai parameter di badan fungsi dan menetapkan nilai jika tidak ditentukan. Jika tidak ada nilai yang diberikan dalam panggilan, nilainya akan tidak ditentukan. Anda harus menetapkan pemeriksaan bersyarat untuk memastikan parameter tidak terdefinisi
Dengan parameter default di ES2015, pemeriksaan di badan fungsi tidak lagi diperlukan. Sekarang Anda cukup meletakkan nilai default di kepala fungsi.
Contoh perbedaan:
// 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
Contoh Sintaks yang berbeda:
Padding tidak terdefinisi vs nilai-nilai palsu lainnya:
Bahkan jika nilainya diatur secara eksplisit saat memanggil, nilai argumen num adalah yang default.
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)
Dievaluasi pada waktu panggilan:
Argumen default dievaluasi pada waktu panggilan, jadi tidak seperti beberapa bahasa lain, objek baru dibuat setiap kali fungsi dipanggil.
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
Parameter default tersedia untuk parameter default nanti:
Params sudah ditemui tersedia untuk parameter default nanti
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.')
Fungsi yang didefinisikan di dalam tubuh fungsi:
Diperkenalkan di Gecko 33 (Firefox 33 / Thunderbird 33 / SeaMonkey 2.30). Fungsi yang dideklarasikan di badan fungsi tidak dapat dirujuk di dalam parameter default dan melempar ReferenceError (saat ini TypeError di SpiderMonkey, lihat bug 1022967). Parameter default selalu dijalankan terlebih dahulu, deklarasi fungsi di dalam tubuh fungsi mengevaluasi sesudahnya.
// Doesn't work! Throws ReferenceError.
function f(a = go()) {
function go() { return ':P'; }
}
Parameter tanpa default setelah parameter default:
Sebelum Gecko 26 (Firefox 26 / Thunderbird 26 / SeaMonkey 2.23 / Firefox OS 1.2), kode berikut menghasilkan SyntaxError. Ini telah diperbaiki di bug 777060 dan berfungsi seperti yang diharapkan di versi yang lebih baru. Parameter masih diatur kiri-ke-kanan, menimpa parameter default bahkan jika ada parameter selanjutnya tanpa default.
function f(x = 1, y) {
return [x, y];
}
f(); // [1, undefined]
f(2); // [2, undefined]
Parameter yang dirusak dengan penetapan nilai default:
Anda dapat menggunakan penetapan nilai default dengan notasi penetapan merusak
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; }
dan kemudian Anda dapat menyebutnya sebagaia = defaultFor(a, 42);