Stránka 1 z 1

JavaScript - obyčejná funkce

Napsal: 28 úno 2016 19:37
od Fucza
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));

Re: JavaScript - obyčejná funkce

Napsal: 28 úno 2016 19:50
od asdsad
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));

Re: JavaScript - obyčejná funkce

Napsal: 28 úno 2016 20:30
od Fucza
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));

Re: JavaScript - obyčejná funkce

Napsal: 28 úno 2016 20:47
od CZechBoY
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

Re: JavaScript - obyčejná funkce

Napsal: 28 úno 2016 20:50
od Fucza
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.

Re: JavaScript - obyčejná funkce

Napsal: 29 úno 2016 08:49
od CZechBoY
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).

Re: JavaScript - obyčejná funkce

Napsal: 29 úno 2016 16:40
od Fucza
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.

Re: JavaScript - obyčejná funkce

Napsal: 01 bře 2016 22:45
od CZechBoY
Tak pouzij debugger :-))
V tom tvym kodu zadnej jinej alert/prompt nevidim.