javaScript pierwsze kroki

0

Witam. Mam pewien problem
Korzystam z naprawdę prostego przykładu.
http://www.centrumxp.pl/InternetExplorer/2180,05-Jak-dodac-grafike-SVG-na-strone.aspx
chodzi o zmienianie wielkości okręgu.
Zmieniłem jednak kod tak aby zwiększać r co kliknięcie o wartość 2

<script>
    function rysujOkrag(evt) 
    {
      var okrag= evt.target;
      var promien= okrag.getAttribute("r");
      var inc=2.0;
        promien=promien+inc;
	alert(promien);
      
	okrag.setAttribute("r",promien);
    }

  </script>

Zmieniłem także początkową wartość na r=5.
Myślałem,że wynik będzie oczywysty 7,9... uzyskałem jednak cos zupełnie innego 52,522. Nie wiem do końca dlaczego.
Ktoś może coś podpowiedzieć?Jestem zupełnie zielony w temacie js. Wcześniej pisałem troche w c,c++, python...Z góry dzięki za odpowiedzi:)

0

Pobierając atrybut - jest on tekstem/stringiem, nie liczbą. Dodając do tekstu "5" liczbę/string "2" wychodzi "52".
Tu mały eksperyment:

>>> 5+2; // obie wartości są liczbami
7
>>> "5"+2; // natomiast gdy jedna jest stringiem
"52"
>>> 5+"2"; // to już zwrot jest strigiem (zauważ cudzysłów) i wartości są łączone jako string, nie liczone jako liczby
"52"
>>> "4" == 4; // co ciekawe, przy porównaniu javascript przeliczy string na liczbę, jeżeli porównujemy do liczby
true
>>> "11" > 4; // takie coś też zostanie sprawdzone jako liczby
true
>>> "11" > "4"; // ale stringi będą już porównane jako stringi
false

Tutaj więcej + informacja o parseInt i parseFloat:
http://pl.wikibooks.org/wiki/JavaScript/Konwersje_typów_prostych

Jeżeli jesteś zaznajomiony z PHP - tam sumowanie nawet dwóch stringów składających się z cyfr spowoduje wyliczenie sumy liczbowej. W javascript tak nie jest, pomimo, że porównania stringu z liczbą zachowają się tak jak w PHP.

Edit: Pisałeś np. w c++ i nie wiesz o typach zmiennych?

0

Dzięki za szybką odpowiedź:)
Zauważyłem, że używa to jako string(a właściwie dodaje) nie wiedziałem jednak z czego to wynika. W założeniu,że w var inc mam 2 a nie "2" a promien też jest wartością liczbową to wydawało mi sie,że powinno dodać jako int/ float a nie jako string.

Jeżeli chodzi o PHP to nie znam się na tym zupełnie, dopiero zaczynam moją przygodę z www.

0

Nie wiem jak udało Ci się dodać zduplikowany post z godzinnym odstępem, ale mniejsza..

Ogółem: Javascript każdy atrybut z HTML czy właśnie SVG (które opierają się na XMLu) będzie wybierał jako string.

0

zamiast parseInt / parseFloat możesz zmusić javascript do zamiany typu przez operacje arytmetyczne, np:

+"5" zamieni string "5" na liczbę 5
możesz też użyć do tego na przykład podwójnej negacji bitowej ~~"5" (też mnożenia, odejmowania, operacji bitowych itp)

w Twoim przykładzie wystarczy wstawić jeden plusik przed:

okrag.getAttribute("r")

(czyli zamienić na +okrag.getAttribute("r"))

co do porównań w js to są dwa
jedno zwykłe == sprowadza porównywane dane do wspólnego typu i dopiero je porównuje
tutaj np: "5"==5 // true
a drugie dokładne === sprawdza najpierw czy typy zmiennych są identyczne a dopiero potem porównuje wartość
tutaj: "5"===5 // false

zazwyczaj będziesz chciał i powinieneś korzystać z drugiego typu porównania

0
unikalna_nazwa napisał(a):

w Twoim przykładzie wystarczy wstawić jeden plusik przed:

okrag.getAttribute("r")

Dzięki Wielkie:)

Masz rację drugi typ porównywania wydaje się bardziej przydatny, szczególnie w przypadku przyzwyczajenia do standardowego porównywania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1