Przejdź do głównej zawartości

Bug #003

🪲 Znajdź buga

const numA = "8"
const numB = "4"

console.log(numA * numB)
console.log(numA / numB)
console.log(numA + numB)
console.log(numA - numB)

Jakie wyniki powyższych działań zostaną zalogowane do konsoli?

🧪 Rozwiązanie

const numA = 8
const numB = 4

console.log(numA * numB)
console.log(numA / numB)
console.log(numA + numB)
console.log(numA - numB)

W przykładzie z błędem, wszystkie działania oprócz "8" + "4" zwrócą poprawne wyniki. Jedynie "8" + "4" zwróci "84".

Aby naprawić ten błąd musimy zapisywać liczby w formacie liczbowym, zamiast jako ciągi znaków.

Wystarczy więc pozbyć się cudzysłowu, zapisując liczby jako 8 i 4.

W przedstawionych działaniach tylko dodawanie zwraca błędny wynik, ponieważ w odróżnieniu od pozostałych operatorów, + ma dwojakie działanie. Sumuje wartości liczbowe lub łączy ciągi znaków.

Jeśli któryś ze składników działania dodawania jest ciągiem znaków, JavaScript zamienia również pozostałe składniki na ciągi znaków i łączy je ze sobą.

"text" + 1 (string + number) zwróci "text1" (string)

5 + "5" (number + string) zwróci "55" (string)

5 + 5 (number + number) zwróci 10 (number)

Pozostałe operatory, przed wykonaniem działania, dokonują konwersji typów danych na typ liczbowy.

Przykładowo, "5" - 5 (string - number) będzie skonwertowane na 5 - 5 (number - number) i zwróci 0 (number).

🎢 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