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
- Logical OR (||) - JavaScript | MDN
- Falsy - MDN Web Docs Glossary: Definitions of Web-related terms | MDN
- Truthy - MDN Web Docs Glossary: Definitions of Web-related terms | MDN
- Default parameters - JavaScript | MDN
❤️ Podobają Ci się bugi JS?
Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js