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

Odpovědět
Fucza
Level 3.5
Level 3.5
Příspěvky: 868
Registrován: 23 črc 2008 10:34

JavaScript - obyčejná funkce

Příspěvek 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));
asdsad
nováček
Příspěvky: 36
Registrován: 17 úno 2013 21:09

Re: JavaScript - obyčejná funkce

Příspěvek 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));
Fucza
Level 3.5
Level 3.5
Příspěvky: 868
Registrován: 23 črc 2008 10:34

Re: JavaScript - obyčejná funkce

Příspěvek 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));
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: 20 srp 2008 14:02
Bydliště: Brno
Kontaktovat uživatele:

Re: JavaScript - obyčejná funkce

Příspěvek 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
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: 23 črc 2008 10:34

Re: JavaScript - obyčejná funkce

Příspěvek 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.
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: 20 srp 2008 14:02
Bydliště: Brno
Kontaktovat uživatele:

Re: JavaScript - obyčejná funkce

Příspěvek 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).
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: 23 črc 2008 10:34

Re: JavaScript - obyčejná funkce

Příspěvek 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.
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: 20 srp 2008 14:02
Bydliště: Brno
Kontaktovat uživatele:

Re: JavaScript - obyčejná funkce

Příspěvek od CZechBoY »

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
Odpovědět

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