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