• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Typy zmiennych w JS

0 głosów
666 wizyt
pytanie zadane 1 marca 2016 w JavaScript przez ukasz112 Początkujący (390 p.)

Siema :)
 

Pisałem ostatnio prosty skrypt w JS. Trochę się zdziwiłem. Mianowicie, spotkałem się z takim dziwnym zjawiskiem:

 

            var form = document.getElementById('from').value + 1;
            var to = document.getElementById('to').value - 1;  

Chciałem ustalić pewne przedziały. Potem chciałem uzyskać wszystkie wartości w tych przedziałach (np podajesz 5 i 50 to ma wypisac 6..49). Napisałem powyższą deklarację i jestem w lekkim szoku, bo zmienną FROM traktuje jako string, a zmienną TO jako int,

czyli jak np podawałem 10 i 100, to zmienne otrzymywało wartości 101 i 99.

Skoro nie podałem w cudzysłowie wartości +1  (czyli *.value + "1"; ) , to nie powinno mi rzutować tej zmiennej na string. Mógłby ktoś mi wyjaśnić czemu tak się dzieje?

2 odpowiedzi

+3 głosów
odpowiedź 1 marca 2016 przez niezalogowany
wybrane 4 marca 2016 przez ukasz112
 
Najlepsza

"+" jest także znakiem konkatenacji w JS, więc jeśli, któryś z jego atrybutów będzie stringiem, wynik również będzie stringiem. 

Wszystkie wartości pobierane przez przez .value są stringami.

Użyj funkcji parseInt(), a dopiero później operuj na zmiennych jak na liczbach.

komentarz 4 marca 2016 przez ukasz112 Początkujący (390 p.)
Kluczem do całej mojej zagwozdki jest fakt, że wszystkie wartości pobrane z .value to stringi :) Myślałem, że problem jest w tej jedynce i to z niej robi się w jakiś magiczny sposób string.

Dzięki za rozjaśnienie tematu :)
+2 głosów
odpowiedź 1 marca 2016 przez Magicone Nałogowiec (45,100 p.)
string + number / number + string → string

Dzieje się tak ze względu na słabe typowanie JS.

Jak już wspomnieli wyżej, możesz zamknąć string w parseInt, żeby go przerzucić na liczbę, albo zwyczajnie postawić przed nim plus.

+'123' → 123
komentarz 1 marca 2016 przez Comandeer Guru (607,060 p.)
Plus jest fajny, ale… zaciemna kod. Są nawet regułki w ESLint wykrywające takie rzeczy ;)
komentarz 1 marca 2016 przez Magicone Nałogowiec (45,100 p.)
Nom, taki lifehack. :P

Podobne pytania

0 głosów
1 odpowiedź 754 wizyt
pytanie zadane 16 maja 2018 w JavaScript przez Tomasz Ozi Orzech Początkujący (300 p.)
0 głosów
1 odpowiedź 1,557 wizyt
pytanie zadane 7 września 2017 w C i C++ przez qlucha Obywatel (1,790 p.)
0 głosów
3 odpowiedzi 415 wizyt
pytanie zadane 7 lipca 2017 w C i C++ przez Krzysiek Kowalczyk Początkujący (360 p.)

93,424 zapytań

142,421 odpowiedzi

322,643 komentarzy

62,782 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...