[ Pobierz całość w formacie PDF ]
// mojObiekt istnieje, podobnie jak mojaWlasciwosc
}
Gdyby w pierwszej kolejności sprawdzane bylo istnienie wlaściwości, to caly test zakoń-
czylby się niepowodzeniem, a dodatkowo skrypt zglosilby bląd, gdyż wyrażenie odwolu-
jące się do obiektu byloby blędne.
JavaScript udostępnia także skróconą formę zapisu, umożliwiającą pominięcie nawiasów
klamrowych w prostych instrukcjach przypisania, które zachowują się różnie w zależności
od warunku. Skladnia ta zostala przedstawiona poniżej:
var mojaZmienna = (warunek) ? wartosc1 : wartosc2;
126 Rozdział 4. Zmienne, funkcje i sterowanie wykonywaniem skryptów
Jeśli warunek przyjmie wartość true, to cale wyrażenie zapisane po prawej stronie opera-
tora przypisania zwróci pierwszą wartość (wartosc1); w przeciwnym wypadku zwró-
cona zostanie druga wartość. Na przyklad:
var kolorTla = (temperatura > 100) ? "red" : "blue";
W kilku recepturach prezentowanych w kolejnych rozdzialach ten skrótowy zapis jest
często wykorzystywany, i to nawet w konstrukcjach zagnieżdżonych. Na przyklad:
var kolorTla = (temperatura > 100) ? "red" : ((temperatura
"yellow");
Powyższe wyrażenie jest odpowiednikiem znacznie dluższej, bardziej czytelnej lecz mniej
eleganckiej zlożonej instrukcji warunkowej:
var kolorTla ;
if (temperatura > 100) {
kolorTla = "red";
} else if (temperatura
kolorTla = "blue";
} else {
kolorTla = "yellow";
}
W sytuacjach gdy istnieje wiele możliwych ścieżek wykonywania skryptu, a to, która z nich
zostanie wykonana, zależy nie od wyrażenia warunkowego lecz od wartości pewnego wy-
rażenia, optymalnym rozwiązaniem jest użycie instrukcji switch. W poniższym przy-
kladzie zakladamy, że formularz zawiera element select pozwalający użytkownikowi na
wybór wielkości produktu. Po dokonaniu wyboru procedura obslugi zdarzeń onchange
zdefiniowana w elemencie select wywoluje funkcję, która wyświetla w polu tekstowym
odpowiedniÄ… cenÄ™:
function okreslCene(formularz) {
var listaWielkosci = formularz.wyborWielkosci;
var wybranyElem =
listaWielkosci.options[listaWielkosci.selectedIndex].value;
switch (wybranyElem) {
case "mala" :
formularz.cena.value = "44.95";
break;
case "srednia" :
formularz.cena.value = "54.97";
break;
case "duza" :
formularz.cena.value = "64.99";
break;
default:
formularz.cena.value = "Wybierz wielkość";
}
}
Jeśli wyrażenie użyte w instrukcji switch zawsze przyjmuje jedną z wartości podanych
w klauzulach case, to można pominąć klauzulę default, jednak podczas tworzenia
skryptu warto ją stosować jako rodzaj zaworu bezpieczeństwa ostrzegającego przed
możliwymi blędami spowodowanymi pojawieniem się nieoczekiwanej wartości.
4.7. Elegancka obsługa błędów w skryptach 127
Patrz także
Większość receptur zamieszczonych w rozdziale 15., wykorzystuje skrócone instrukcje
warunkowe do obslugi różnych modeli obslugi zdarzeń.
4.7. Elegancka obsługa błędów w skryptach
NN 6 IE 5
Problem
Chcemy obslugiwać wszystkie blędy pojawiające się w skryptach w taki sposób, aby użyt-
kownicy ich nie zauważali, czyli chcemy sprawić, by przeglądarka nie wyświetlala komu-
nikatów o blędach.
RozwiÄ…zanie
™stnieje pewien szybki, lecz niezbyt elegancki sposób unikniÄ™cia generacji komunikatów
o blędach pojawiających się w skryptach, dzialający także w starszych wersjach przegląda-
rek. Polega on na dodaniu poniższego fragmentu kodu do skryptu umieszczonego w na-
glówku strony:
function nicNieRob() {return true;}
window.onerror = nicNieRob;
Rozwiązanie to nie zapobiegnie generowaniu blędów pojawiających się podczas kompilacji
skryptów (na przyklad blędów syntaktycznych wykrywanych przez interpreter podczas
ladowania strony). Co więcej, nie udostępni ono programistom informacji o tym, w których
miejscach kodu pojawily się blędy. Można je stosować jedynie w wypadkach, gdy konieczne
jest opublikowanie strony przed jej dokladnym przetestowaniem; podczas testowania strony
powyższy fragment kodu należy usunąć.
W przeglÄ…darkach ™E 5 oraz Netscape 6 (oraz ich nowszych wersjach) można stosować
bardziej formalny sposób obslugi blędów (wyjątków). Aby starsze wersje przeglądarek nie
generowaly żadnych komunikatów o blędach po napotkaniu specjalnych instrukcji wyko-
rzystywanych do obslugi wyjątków, instrukcje te należy umieszczać w bloku ,
którego atrybut language informuje o wykorzystaniu języka JavaScript 1.5 (language=
"JavaScript1.5").
™nstrukcje, które mogÄ… powodować (zglaszać) wyjÄ…tki, należy umieszczać wewnÄ…trz bloków
try-catch. Wykonywane instrukcje zapisywane sÄ… w bloku try, natomiast blok catch
przetwarza wszelkie zglaszane wyjÄ…tki:
function mojaFunkcja() {
try {
// instrukcja (instrukcje), które w wypadku spełnienia pewnych warunków
128 Rozdział 4. Zmienne, funkcje i sterowanie wykonywaniem skryptów
[ Pobierz całość w formacie PDF ]