Skip to content

Parâmetros Padrão em JavaScript

Introdução

Em JavaScript, as funções podem ter valores padrão, ou seja, receber um valor caso nenhum seja fornecido.

Parâmetros Padrão

Usaremos uma função simples de adição como exemplo:

javascript
function sum(a, b) {
  return a + b;
}

sum(5, 5); // 10
sum(5, null); // 5
sum(5, undefined); // NaN 
sum(5, ''); // "5"
sum(5, 0); // 5

Normalmente, para transformar valores inválidos recebidos em 0, por exemplo, pode-se fazer o seguinte:

javascript
function sum(a, b) {
  // se 'a' não for válido, define como 0
  if (!a) {
    a = 0;
  }
  // se 'b' não for válido, define como 0  
  if (!b) {
    b = 0;
  }
  return a + b;
}

sum(5, 5); // 10
sum(5, null); // 5
sum(5, undefined); // 5
sum(5, ''); // 5
sum(5, 0); // 5

No entanto, usando parâmetros padrão, poderíamos transformar essa mesma função da seguinte maneira:

javascript
// definimos o valor padrão de 'a' e 'b' igual a 0
function sum(a = 0, b = 0) {
  return a + b; 
}

sum(5); // 5    (5 + 0)
sum(5, undefined); // 5    (5 + 0)
sum(5, null); // 5    (5 + null)  
sum(5, ''); // "5"  (5 + '')
sum(5, 5); // 10   (5 + 5)
sum(5, 0); // 5    (5 + 0)

Vemos que os parâmetros padrão são aplicados apenas em parâmetros undefined, portanto, receber null, 0 ou '' fará com que esses valores sejam usados.

Agora outro exemplo com um 'Hello World!':

javascript
function helloWorld(name) {
  return 'Hello ' + name + '!';
}

helloWorld(); // 'Hello undefined!'
helloWorld(undefined); // 'Hello undefined!'
helloWorld(null); // 'Hello null!'
helloWorld(''); // 'Hello !' 
helloWorld('World'); // 'Hello World!'

Se não enviarmos os parâmetros apropriados, acabamos com resultados inesperados, neste caso Hello undefined!.

Podemos corrigir isso usando parâmetros padrão:

javascript
function helloWorld(name = 'World') {
  return 'Hello ' + name + '!';
}

helloWorld(); // 'Hello World!'
helloWorld(undefined); // 'Hello World!' 
helloWorld(null); // 'Hello null!'
helloWorld(''); // 'Hello !'
helloWorld('World'); // 'Hello World!'

Vemos que, caso nenhum parâmetro seja enviado (undefined), a função usa o padrão, neste caso, 'World'. Embora, como mencionado anteriormente, os parâmetros padrão só funcionam se o valor recebido for undefined. No caso de receber 0, null ou '' como parâmetro, esses valores serão usados.

Agora vamos ver outro exemplo concatenando arrays:

javascript
function salad(fruits, vegetables) {
  return fruits.concat(vegetables);
}

salad(); // TypeError: Cannot read property 'concat' of undefined
salad(['grapes']); // ['grapes', undefined]

salad(['apple', 'pear'], []); // ['apple', 'pear']  
salad(['apple', 'pear'], ['lettuce', 'onion']); // ['apple', 'pear', 'lettuce', 'onion']

Com parâmetros padrão:

javascript
function salad(fruits = [], vegetables = []) {
  return fruits.concat(vegetables);
}

salad(); //  []
salad(['grapes']); //  ['grapes'] 
salad(['apple', 'pear'], []); //  ['apple', 'pear']
salad(['apple', 'pear'], ['lettuce', 'onion']); //  ['apple', 'pear', 'lettuce', 'onion']

Os parâmetros padrão podem simplificar consideravelmente as validações ao criar funções. Estes podem ser de qualquer tipo, ou seja, number, object, string, etc. até mesmo funções ou parâmetros padrão previamente definidos.

Portanto, isso é totalmente válido:

javascript
function sum(a = 5, b = 3, c = a - b) {
  return a + b + c;
}

sum(); // 10	(5 + 3 + 2) 
sum(3); // 6	(3 + 3 + 0)
sum(10); // 20	(10 + 3 + 7)

function sum2(a = sum(10), b = 5) {
  return a + b;  
}

sum2(); // 25	(20 + 5)
sum2(10); // 15	(10 + 5)