Uvod
U dosadašnjoj praksi (ES5) se koristio sledeći pristup definisanju podrazumevanih vrednosti parametara funkcje:
1 2 3 4 5 |
function saberi (x, y) { x = x || 10; y = y || 100; console.log(x+y); } |
Problem se javlja kada se prosledi neka vrednost koju kompajler implicitno konvertuje u logičku vrednost “false” (npr. nula), pa zbog toga umesto nje uzima podrazumevanu vrednost:
1 |
saberi(0, 50) // Vraća: 60 |
Stoga je potrebno da poboljšamo uslov:
1 |
x = (x !== undefined) ? x : 11; |
ES2015 sintaksa
Uz novi standard je došla i jednostavnija sintaksa za definisanje podrazumevanih vrednosti sa sledećim pravilom:
Podrazumevano definisana vrednost se primenjuje u slučaju kada je argument izostao ili je nedefinisan, a “null” je validna vrednost!
1 2 3 4 5 6 7 8 9 |
function test(x = 1) { console.log(typeof num); } test(); // 'number' (x se definiše kao: 1) test(undefined); // 'number' (x se definiše kao: 1 too) test(''); // 'string' (x se definiše kao: '') test(null); // 'object' (x se definiše kao: null) |
Definisanje podrazumevane vrednosti parametra dobro radi i u saradnji sa destruktuiranjem:
1 2 3 4 5 |
function test([x, y] = [1, 2], {z: z} = {z: 3}) { return x + y + z; } test(); // Vraća: 6 |
Osim pomenutog izostanka vrednosti ili “undefined”, podrazumevana vrednost može biti bilo šta drugo, pa čak i druga funkcija:
1 2 3 4 5 6 7 8 9 10 |
function multiply (a) { return a * 2; } // Default parameters are also available to later default parameters function foo (num = 1, duplo = multiply(num)) { return [num, duplo]; } console.log(foo()); // Vraća: [1, 2] console.log(foo(6)); // Vraća: [6, 12] |