Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania i odpowiedzi
Viewing all articles
Browse latest Browse all 83230

Odpowiedź: Potrzebuję wyjaśnienia!

$
0
0

Dobre pytanie. Jak zwykle - problemy ze słabym typowaniem

Podstawowa sprawa - funkcji isNaN używa się tylko na sparsowanych zmiennych, ponieważ, jak się okazuje, bez problemu przepuszcza stringa np "-4". -> wewnątrz funkcji odbywa się niejawna konwersja typu na int, a program ochoczo rusza dalej, niosąc ze sobą pierwszy "błąd".

Dla ułatwienia, oznaczmy sobie zmienne a = "-4", b = "-1".

Zaczynamy od if ( b> a )

I w tym momencie robi się ciekawie. Stwierdzimy oczywiście, że b jest większe od a.. STOP!

W rzeczywistości nasz warunek nie wygląda tak: (-1>-4) tylko tak: ("-1">"-4") Co to oznacza? - Porównywane są stringi, JS sprawdzi czy "-1" jest dalej w kolejności alfabetycznej niż "-4".

Znak "-" występuje w obu stringach na pierwszym miejscu, toteż sprawdzane będą kolejne znaki - dalej nastąpi porównanie 1 oraz 4. W tym momencie szybko okazuje się, że "-1" jest mniejsze, a nasz warunek ( b > a ) zwraca FAŁSZ (pisząc ten kod, z pewnością nie takiego zachowania się spodziewaliśmy)

Program wykonuje się dalej - ciągnąc ze sobą już dwa "błędy"

Drugi if ( b< a ) zwróci zatem TRUE, i zacznie się wykonywać taka oto pętla:

for(i = b; i <= a; i++) napisz = napis + i + ' ';

Podłóżmy wartości "liczbowe":

for(i = "-1"; i <= "-4"; i++) napisz = napis + i + ' ';

i poiterujmy:

Iteracja pierwsza:
i = "-1";
sprwadzenie warunku ( "-1"<= "-4" ) TRUE - pętla wykonywana jest dalej;
napis = "" + "-1" + ' '; 
i++ ( Zgadnijcie co zwraca "-1"++ ? -0 (słownie ZERO) - najzwyklejsze zero, które jest LICZBĄ;

Iteracja druga:
i = 0;
sprawdzanie warunku ( 0<= "-4" ) FALSE (w tym przypadku następuje niejawna konwersja z "-4" na -4, i bez niespodzianek, -4 nie jest większe lub równe 0)  - pętla kończy działanie;

Zostaje już tylko wyświetlenie zmiennej napis, w której siedzi ""+"-1"+' ' - czyli zwyczajny string "-1". 

Stąd ten dziwny wynik : )

 

Morał: Zawsze parsujcie zmienne z inputów!


Viewing all articles
Browse latest Browse all 83230

Trending Articles


Sprawdź z którą postacią z anime dzielisz urodziny


MDM - Muzyka Dla Miasta (2009)


Częstotliwość 3.722MHz


POSZUKIWANY TOMASZ SKOWRON-ANGLIA


Ciasto 3 Bit


Kasowanie inspekcji Hyundai ix35


Steel Division 2 SPOLSZCZENIE


SZCZOTKOWANIE TWARZY NA SUCHO


Potrzebuje schemat budowy silnika YX140


Musierowicz Małgorzata - Kwiat kalafiora [audiobook PL]