Autor | Zpráva | ||
---|---|---|---|
Měsíček Profil |
#1 · Zasláno: 18. 9. 2008, 17:49:13
Zdravím,
natrefil jsem na jednu zvláštnost a to u tohoto kódu. <script type="text/javascript"> var pomocna_promenna = true; var pomocna_promenna2 = 1; try { if(pomocna_promenna2 == 1){ throw "Chyba_1"; } } catch (e if (pomocna_promenna == true)) { if( e == "Chyba_1" ){ alert("Něco je zjevně špatně!"); } } finally { alert("No nic ..."); } </script> Již dopředu děkuji za odpovědi. |
||
Chamurappi Profil |
#2 · Zasláno: 18. 9. 2008, 18:26:19 · Upravil/a: Chamurappi
Reaguji na Měsíčka:
„Celý tento skript funguje v FF tak jak by měl fungovat“ Zdá se, že funguje pouze v něm. Abych pravdu řekl, tak catch s podmínkou vidím poprvé v životě. „Není nějáká jiná možnost, aby příkaz catch() chytal výjmky závisle“ Zvolit jinak strukturu skriptu, podmínku dát dovnitř atd. — musí to jít přešrouborat. Nejsem zrovna přívržencem hrátek s výjimkami (v JavaScriptu), try–catch používám jen z donucení okolnostmi. Příkaz throw jsem nepoužil nikdy. Nejde to, čeho chceš dosáhnout, udělat úplně bez výjimek? |
||
Měsíček Profil |
#3 · Zasláno: 18. 9. 2008, 18:55:03
"Nejde to, čeho chceš dosáhnout, udělat úplně bez výjimek?"
Určitě jde, ale rád bych měl u těchto příkazů jasno - proto v tom hledám špinavá zákoutí. "Zvolit jinak strukturu skriptu, podmínku dát dovnitř atd. — musí to jít přešrouborat. " Nejspíše asi ano :( .. pokud nechci IE odříznout tak budu nejspíše muset dát catch() do podmínky celý a nebo vložit podmínku před podmínku která mi kontroluje jestli se objekt e rovná "Chybě_1", jen mě mrzí, že zrovna v tak jednoduché konstrukci se musí podpora v prohlížečích rozcházet. Jinak díky za reakci. |
||
joe Profil |
#4 · Zasláno: 18. 9. 2008, 20:55:38
„nejspíše muset dát catch() do podmínky celý a nebo vložit podmínku před podmínku“
Spíš tu druhou možnost, teď si nejsem jistý, jestli bys mohl přerušit - překřížit try-cacth-finally. } catch (e) { if( e == "Chyba_1" && pomocna_promenna == true){ alert("Něco je zjevně špatně!"); } } V catch jsem nikdy podmínku neviděl a nevím k čemu by tam byla užitečná... |
||
ah01 Profil |
#5 · Zasláno: 18. 9. 2008, 21:23:01 · Upravil/a: ah01
Měsíček
try ... catch s podmínkou funguje jen ve FF. Přidali to v jedné vyšší verzi JS, takže v IE to fungovat nebude. Jak jsou na tom ostatní prohlížeče, jsem už dál nezkoumal. Je to asi 3 měsíce co jsem po tom pátral, ale obávám se, že situace se od té doby nezměnila. joe Využívá se to pro detekci typu výjimky, podobně jako to jde například v Jave. Koukni se na příklady na stránce, na kterou odkazuje Chamurappi. Já jsem to tehdy nakonec řešil asi takto: ... catch(e) { if(!(e instanceof XMLReader.XMLElementNotFound)) throw e; // nejedná se o výjimku od XMLReader, poslat o dům dál // obsluha výjimky } ... Měsíček Osobně si myslím, že by se tato catch podmínka měla používat pouze k detekci typu výjimky nebo k zjištění informací přímo z výjimky (proměnné e) a ne k testování jiné proměnné. To už podle mě patří dovnitř catch bloku. |
||
peta Profil |
#6 · Zasláno: 19. 9. 2008, 14:04:43
nejake priklady na try catch
http://javascript-reference.info/#error http://www.volny.cz/peter.mlich/www.htm#main3 co rika primo mozilla (pro CH google.com mozilla catch) http://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Exception_Ha ndling_Statements/try...catch_Statement tak mozilla tam treba ma primo try { // function could throw three exceptions getCustInfo("Lee", 1234, "lee@netscape.com") } catch (e if e == "InvalidNameException") { // call handler for invalid names bad_name_handler(e) } catch (e if e == "InvalidIdException") { // call handler for invalid ids bad_id_handler(e) } A co na to explorer? (pro CH google.com catch site:msdn.microsoft.com) http://msdn.microsoft.com/en-us/library/4yahc5d8(VS.85).aspx IE nam rika try { try { if (x == 0) // Evalute argument. throw "x equals zero"; // Throw an error. else throw "x does not equal zero"; // Throw a different error. } catch(e) { // Handle "x = 0" errors here. if (e == "x equals zero") // Check for an error handled here. return(e + " handled locally."); // Return object error message. else // Can't handle error here. throw e; // Rethrow the error for next } // error handler. } catch(e) { // Handle other errors here. return(e + " handled higher up."); // Return error message. } Cili, ze to v IE asi nepujde tak napsat, kdyz neuvadi priklad. |
||
peta Profil |
#7 · Zasláno: 19. 9. 2008, 14:06:36
Cili bych to prepsal, jak uvadi joe nebo IE
catch(e) { if (...) {...} if (...) {...} } |
||
Měsíček Profil |
#8 · Zasláno: 19. 9. 2008, 15:51:17
Reaguji na joea:
"V catch jsem nikdy podmínku neviděl a nevím k čemu by tam byla užitečná..." No tak například když chceš, aby chytání "všech" výjmek záviselo na nějáké hodnotě, pokud se dá podmínka až do podmínky, která odchytne určitou chybu je to otázka pouze odchycení "jedné" výjmky, ne všech. Reaguji na ah01: "Osobně si myslím, že by se tato catch podmínka měla používat pouze k detekci typu výjimky nebo k zjištění informací přímo z výjimky (proměnné e) a ne k testování jiné proměnné. To už podle mě patří dovnitř catch bloku." Taky se tím asi už budu řídit. "takže v IE to fungovat nebude." Snad by to mohli dodělat v IE8. Reaguji na peteho: Co se týče reference na developer.mozilla.org tak tu jsem si četl (pravda podívat se na MSDN to mě nenapadlo) - žel ještě nejsem tak zběhlý, abych vše bezpečně pochopil :) |
||
Časová prodleva: 6 dní
|
|||
es Profil * |
#9 · Zasláno: 25. 9. 2008, 23:21:22
Niečo k tomu v češtine: http://developer.mozilla.org/cs/JavaScript_v_Mozille/V%C3%BDjimky
|
||
Časová prodleva: 16 let
|
0