Przejdź do głównej zawartości

Bug #007

🪲 Znajdź buga

function addTax(price, tax) {
tax = tax || 0.23

return price + price * tax
}

const priceWithTax = addTax(100, 0)

console.log(priceWithTax)

Chcemy stworzyć funkcję, która będzie nam wyliczała cenę z podatkiem. Zależy nam też na ustawieniu domyślnej wartości podatku na 23%.

Jaka cena zostanie zalogowana do konsoli jako efekt wykonania funkcji addTax(100, 0)?

🧪 Rozwiązanie

function addTax(price, tax = 0.23) {
return price + price * tax
}

const priceWithTax = addTax(100, 0)

console.log(priceWithTax)

W przykładzie z błędem, do konsoli zostania zalogowana cena 123.

Mimo, że wywołując addTax() wyraźnie podajemy w drugim argumencie 0 jako wartość podatku, to używając wewnątrz funkcji logicznego operatora OR (||), wartość 0 traktowana jest jako wartość fałszywa (falsy). W procesie porównywania jest więc odrzucana na rzecz wartości prawdziwej (truthy) i finalnie do zmiennej tax przypisana zostaje wartość 0.23.

Aby naprawić ten błąd możemy np. bezpośrednio podać wartość domyślną dla parametru tax podczas deklarowania funkcji.

Unikniemy dzięki temu wykonywania operacji porównania i wewnątrz funkcji używana będzie dokładnie taka wartość, jaką przekażemy w argumencie wywołując funkcję. W przypadku braku przekazania argumentu tax, użyta zostanie wartość domyślna 0.23.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js