JavaScript - obyčejná funkce

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Fucza
Level 3.5
Level 3.5
Příspěvky: 868
Registrován: červenec 08
Pohlaví: Muž
Stav:
Offline

JavaScript - obyčejná funkce

Příspěvekod Fucza » 28 úno 2016 19:37

Zdravím.
Chci se naučit JavaScript a radši než webové tutoriály mám radši obyčejnou knihu.
Jednu teď studuju (od úplných základů) a při řešení jednoho příkladu jsem narazil na problém a nevidím tam tu chybu.

Definuju funkci s dvěma parametry. Pokud je první parametr větší než druhý, tak to pomocí alert zobrazí, pokud je první parametr menší nebo roven druhému, funkce má vrátit součet obou parametrů. Ještě tam mám ošéfování, pokud by to nebyla čísla.

Nevím proč, ale funkce mi vrací součet řetězců (místo 3 + 5 = 8 vrátí 35).
Pak ještě vrátí něco undefined (To už vůbec nevím proč).

Moc díky. Něco někde prostě nevidím.

Kód: Vybrat vše

function priklad(x,y) {
   if ((isNaN (x)) || (isNaN (y))) {
   alert ("Proměnné nejsou čísla!!");
   return;
   }
   else if (x > y) {
   alert ("Proměnná X je větší než Y");
   return;
   }
   else {
      return x+y;
   }
}
var x = prompt ("Zadej X");
var y = prompt ("Zadej Y");

alert (priklad (x,y));

Reklama
asdsad
nováček
Příspěvky: 36
Registrován: únor 13
Pohlaví: Muž
Stav:
Offline

Re: JavaScript - obyčejná funkce

Příspěvekod asdsad » 28 úno 2016 19:50

Ještě nevím co s tim undefined, ale je to jasný, z promptu ti vyleze řetězec, musíš ho přeměnit na číslo.

Kód: Vybrat vše

unction priklad(x,y) {
   if ((isNaN (x)) || (isNaN (y))) {
   alert ("Proměnné nejsou čísla!!");
   return;
   }
   else if (x > y) {
   alert ("Proměnná X je větší než Y");
   return;
   }
   else {
     
return x+y;
   }
}
var x = Number(prompt ("Zadej X"));
var y = Number(prompt ("Zadej Y"));

alert (priklad (x,y));

Fucza
Level 3.5
Level 3.5
Příspěvky: 868
Registrován: červenec 08
Pohlaví: Muž
Stav:
Offline

Re: JavaScript - obyčejná funkce

Příspěvekod Fucza » 28 úno 2016 20:30

Díky.
To jsem nevěděl, že prompt vrací typ String.
Když jsem otestoval zadat hodnoty natvrdo, tak to šlo. Převedl jsem ty hodnoty na čísla před voláním funkce. Pokud se provádí ten součet, tak je OK. Ale pokud ty první dvě možnosti, tak to po výpisu alert hodí ještě jedno okno s undefined, které nevím, odkud pochází.

Btw. Stejně když se zavolá ta funkce, tak v prvním ifu se testuje, zda to vůbec čísla jsou (ale to si to myslím, že jsem to někde četl, že si to na čísla převede sám. Teoreticky by měl po prompt hned v prvním ifu napsat, že se nejedná o čísla ale o String.

Kód: Vybrat vše

function priklad(x,y) {
   if ((isNaN (x)) || (isNaN (y))) {
   alert ("Proměnné nejsou čísla!!");
   return;
   }
   else if (x > y) {
   alert ("Proměnná X je větší než Y");
   return;
   }
   else {
      return x+y;
   }
}

 var x = prompt ("Zadej X");
var y = prompt ("Zadej Y");

x = Number(x);
y = Number(y);

alert (priklad (x,y));

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: JavaScript - obyčejná funkce

Příspěvekod CZechBoY » 28 úno 2016 20:47

Posli celej kod. Tady nevidim zadnej prompt ani jak volas tu funkci.

IsNan urci jestli je retezec cislo, to co do nej cpes asi cislo je. Jenze neni typu cislo ale typu retezec a tak se retezce spojuji misto secitani cisel.
Retezcova cisla si tedy preved na float - desetinny ciselny typ - a pak uz s promennou muzes pracovat jako s cislem.
http://www.w3schools.com/jsref/jsref_parsefloat.asp
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

Fucza
Level 3.5
Level 3.5
Příspěvky: 868
Registrován: červenec 08
Pohlaví: Muž
Stav:
Offline

Re: JavaScript - obyčejná funkce

Příspěvekod Fucza » 28 úno 2016 20:50

To je celý kód.
Je to jen příklad v externím js souboru, který je volaný v head html souboru. Možná si si nevšiml posuvníku v kódu.

Já to převedl pomocí Number.

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: JavaScript - obyčejná funkce

Příspěvekod CZechBoY » 29 úno 2016 08:49

Takže už ti to funguje jak má? Označ fajfkou jako vyřešeno.

Jo, toho posuvníku jsem si nevšiml, protože na mobilu se nezobrazuje (ping @Ltb).
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

Fucza
Level 3.5
Level 3.5
Příspěvky: 868
Registrován: červenec 08
Pohlaví: Muž
Stav:
Offline

Re: JavaScript - obyčejná funkce

Příspěvekod Fucza » 29 úno 2016 16:40

Dobře funguje jen, pokud k tomu součtu dojde. Jak se zadá místo čísla řetězec nebo je první parametr větší - alert to sice správně vypíše, ale potom se otevře ještě okno undefined, což nechápu, kde se bere.
Díky.

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: JavaScript - obyčejná funkce

Příspěvekod CZechBoY » 01 bře 2016 22:45

Tak pouzij debugger :-))
V tom tvym kodu zadnej jinej alert/prompt nevidim.
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW


Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti