Quando um argumento não é passado ao invocar uma função, o valor é undefinied.
ES5 - Tratar e validar argumentos (Valores default)
O tratamento e validações eram de responsabilidade do dev, cada um implementava sua prórpia forma.Solução 1
function mult(a, b){
b = b || 1;
return a * b;
}
Definido valor default 1 caso b não seja passado
Solução 2
function mult(a, b){
b = typeof b === 'undefined' ? 1 : b;
return a * b;
}
Definido valor default 1 caso b não seja passado - Resolve zero
Solução 3
function mult(a, b){
if (typeof b === 'undefined'){
b = 1;
}
return a * b;
}
Definido valor default 1 caso b não seja passado - Outra versão da Solução 2O problema dessas soluções é que são verbosas.
ES6 - Tratar e validar argumentos (Valores default)
Forma não verbosa de atribuir valor default ao argumento durante a passagem de parâmetros.Solução 1
function mult(a, b = 1){
return a * b;
}
Solução 2
function mult(a, b = a){
return a * b;
}
A ORDEM importa, não é permitido referenciar um argumento que vem depois, que ainda não foi definido.
Solução 3
function mult(a, b = a * 2){
return a * b;
}
Solução 4
function randomNumber(){
return Math.random() * 10;
}
function mult(a, b = randomNumber()){
return a * b;
}
randomNumber() é invocada toda vez q mult() é executada (Lazy Valuation)