Parametry domyślne

Wartości, które parametr funkcji dostaje, gdy argument nie zostanie podany albo ma wartość undefined.

Na tej stronie

Przykład

#
JavaScript
function createPlayer(name = 'Gość', level = 1) {
  return `${name}, poziom ${level}`
}

console.log(createPlayer('Ania', 5))
console.log(createPlayer('Kuba'))
console.log(createPlayer())
Konsola
Ania, poziom 5
Kuba, poziom 1
Gość, poziom 1

Definicja i zastosowanie

#

Parametr domyślny zapisujesz w definicji funkcji przez znak równości: function greet(name = "Gość"). Jeśli przy wywołaniu pominiesz argument albo przekażesz undefined, parametr dostanie wartość domyślną. Dzięki temu funkcja nie musi sama sprawdzać, czy dostała dane.

Wartość domyślna zadziała tylko dla undefined. Przekazanie null, 0, false czy pustego napisu to świadomy wybór wartości, więc zostanie ona użyta. To odróżnia parametry domyślne od starszego wzorca name = name || "Gość", który zastępował też poprawne dane, np. zero.

Wyrażenie domyślne jest obliczane przy każdym wywołaniu, w którym jest potrzebne, a nie raz przy definicji funkcji. Każde wywołanie z items = [] dostaje więc nową, pustą tablicę. Wartość domyślna może korzystać z wcześniejszych parametrów, np. (points, bonus = points / 2), i łączy się z destrukturyzacją: function setup({ theme = "dark" } = {}).

Składnia

#
Składnia
function name(param = defaultValue) {}
const fn = (a, b = a * 2) => {}
function name({ key = value } = {}) {}

Więcej przykładów

#
Tylko undefined uruchamia wartość domyślną
JavaScript
function setVolume(volume = 50) {
  return volume
}

console.log(setVolume(undefined))
console.log(setVolume(null))
console.log(setVolume(0))

function oldSetVolume(volume) {
  volume = volume || 50
  return volume
}

console.log(oldSetVolume(0))
Konsola
50
null
0
50

Stary wzorzec z || zamienił poprawną głośność 0 na 50. Parametr domyślny zostawił zero, bo reaguje tylko na undefined.

Wartość zależna od wcześniejszego parametru
JavaScript
function createTask(title, points = 10, bonus = points / 2) {
  return { title, points, bonus }
}

console.log(createTask('Quiz'))
console.log(createTask('Projekt', 40))
Konsola
{ title: 'Quiz', points: 10, bonus: 5 }
{ title: 'Projekt', points: 40, bonus: 20 }
Obiekt opcji z wartościami domyślnymi
JavaScript
function startLesson({ speed = 1, subtitles = true } = {}) {
  return `Prędkość ${speed}x, napisy: ${subtitles ? 'tak' : 'nie'}`
}

console.log(startLesson({ speed: 1.5 }))
console.log(startLesson())
Konsola
Prędkość 1.5x, napisy: tak
Prędkość 1x, napisy: tak

Końcowe = {} sprawia, że funkcję można wywołać bez argumentu. Bez niego destrukturyzacja undefined rzuciłaby TypeError.

Obsługa przeglądarek

#

Szeroko dostępne

Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.

  • Chrome
  • Edge
  • Firefox
  • Safari

Dobre praktyki

#
  • Parametry z wartościami domyślnymi umieszczaj na końcu listy. Wtedy wystarczy pominąć ostatnie argumenty, bez przekazywania undefined w środku.
  • Przy obiekcie opcji dodaj = {} dla całego parametru. Bez tego wywołanie funkcji bez argumentu rzuci TypeError przy destrukturyzacji.
  • Gdy chcesz zastąpić także null, użyj w ciele funkcji operatora ??: const size = input ?? 16.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.