Wykład 1 - Republika WWW
Transkrypt
Wykład 1 - Republika WWW
Język JavaScript JavaScript - wykład 1 Podstawy Beata Pańczyk W oparciu o kurs: http://republika.onet.pl/-1,34,fabryka.html 1 • JavaScript – wprowadzony przez firmy Netscape i Sun język skryptowy (nie wymaga kompilacji) wspomagający tworzenie dokumentów HTML • Wykonywanie poleceń JavaScript - przeglądarka WWW (interpretacja po stronie klienta) • JavaScript dodaje do stron WWW interaktywność – moŜliwość reagowania na polecenia uŜytkownika • Język zorientowany obiektowo, składnia i podstawowa struktura wzorowana na C/C++ • jeden ze składników DHTML-a, czyli Dynamicznego HTML-a (z ang. Dynamic HTML). • DHTML to technika tworzenia i modyfikacji elementów strony za pomocą języka skryptowego. 2 Historia • • • • • połowa lat 90 - w firmie Netscape powstał język LiveScript 1995 - przemianowany na JavaScript główny twórca - Brendan Eich kolejne lata - kolejne wersje ustandaryzowany przez ECMA (międzynarodowa organizacja standaryzacyjna, skrót od dawnej nazwy European Computer Manufacturers Association) • zamieszanie w nazewnictwie - uŜywane są nazwy JavaScript, ECMAScript oraz (dla produktów firmy Microsoft) JScript. • obecnie występujące na rynku wersje najpopularniejszych przeglądarek (FireFox 1.5, Internet Explorer 6, Netscape 8, Opera 8) są zgodne z ECMAScript v3, czyli JavaScript 1.5 oraz JScript 5.5 i 5.6. Wersje ECMA Script V1 V3 V4 JavaScript JScript 1.0 1.1 1.2 1.3 1.4 1.5 2.0 1.1 2.0 3.0 5.5, 5.6 .NET 3 4 Określenie typu skryptów Zastosowania • budowa stron reagujących na działania uŜytkownika • sprawdzanie poprawności formularzy • obsługa elementów interfejsu strony (np. dynamicznych menu i przycisków) • dynamiczne generowanie treści oraz realizacja wielu innych efektów 5 • dokument HTML – powinien w nagłówku zawierać określenie domyślnego języka skryptowego – nie jest to obligatoryjne, ale zalecane przez W3C • <meta http-equiv="Content-Script-Type" content="typ"> typ - rodzaj języka. • w przypadku języka JavaScript: <meta http-equiv="Content-Script-Type" content="text/javascript"> • brak powyŜszego znacznika - przeglądarka próbuje ustalić domyślny język skryptowy na podstawie nagłówków HTTP otrzymanych z serwera 6 1 Umieszczanie skryptów w kodzie HTML Skrypty osadzone • Skrypty osadzone - umieszczane wewnątrz kodu HMTL przy uŜyciu znacznika <script> z obligatoryjnym parametrem type, o ile dokument ma być zgodny ze specyfikacją HTML 4 • Skrypty zewnętrzne - umieszczenie skryptu w oddzielnym pliku i uŜycie znacznika <script> z parametrem src 7 Kod JavaScript w HTML<4 • <script type="text/javascript"> //tutaj kod skryptu </script> • większość dostępnych na rynku przeglądarek potrafi pracować w trybie zgodności z przestarzałymi standardami i akceptuje równieŜ znacznik <script> nie zawierający argumentu type • language – parametr dawniej określający język skryptu (np. language="javascript"); nie występuje w ścisłej (strict) wersji standardu HTML 4 i obecnie nie naleŜy go stosować (z drugiej strony - starsze przeglądarki, obsługujące standard HTML wcześniejszy niŜ 4.0, rozpoznają tylko parametr language, nie rozpoznają natomiast parametru type) 8 Kod JavaScript w HTML4.x <html> <head> <script language="javascript"> <!-- ukrycie skryptu // instrukcje do wykonania --> </script> </head> • kod w bloku znaczników <script>...</script> • wymagany parametr: – type (dla JavaScriptu "text/javascript") – opcjonalnie parametr language oznaczający minimalny numer wersji JavaScript • Np.. <script type="text/javascript" language="JavaScript1.5"> // Ten skrypt wymaga JS 1.5. function fun() { ... } </script> 9 Kod JavaScript w XHTML • nie występuje parametr language • specyfikacja XML wymaga, by umieścić treść skryptu wewnątrz sekcji CDATA, jeśli stosowane są znaki "<" czy ">" • <script type="text/javascript"> // <![CDATA[ function fun() { ... } // ]]> </script> Znaki komentarza "//" zapobiegają błędnemu zinterpretowaniu tej sekcji przez starsze przeglądarki 11 10 Skrypty zewnętrzne • oddzielny plik zwykle z rozszerzeniem js • <script type="text/javascript" src="lokalizacja skryptu"> </script> <script type="text/javascript" src="http://nazwa.domeny/skrypty/skrypt.js"> </script> • znacznik zamykający </script> jest niezbędny i nie naleŜy go pomijać. 12 2 Pełny dokument ze skryptem Ukrywanie skryptów <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <title>Moja strona WWW</title> <script type="text/javascript" src="http://nazwa.domeny/skrypty/skrypt.js"> </script> </head> <body> <script type="text/javascript"> </script> </body> 13 </html> • Jeśli przeglądarka nie obsługuje pewnego typu skryptów, bądź obsługa skryptów jest wyłączona - naleŜy wyświetlić stosowną informację lub teŜ wykonać alternatywny kod stosując znacznik <noscript>: • <script type="text/javascript"> </script> <noscript> <h1> Ta witryna wymaga obsługi skryptów </h1> </noscript> 14 Prosty skrypt Ukrywanie skryptów c.d. • witryna moŜe być odczytywana przez przeglądarki nie obsługujące JavaScript i nie rozpoznające znacznika <script> (mało prawdopodobne) • w celu uniknięcia wyświetlenia kodu skryptu, ujmuje się go w komentarze SGML: • <script type="text/javascript"> <!-- Ukrycie przed przeglądarkami nie obsługującymi // JavaScript tutaj treść skryptu // Koniec kodu JavaScript --> </script> 15 <?xml version="1.0" encoding="iso-8859-2"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"/> <meta http-equiv="Content-Script-Type" content="text/javascript"/> <title>Pierwszy skrypt</title> <script type="text/javascript"> <!-- Ukrycie przed przeglądarkami nie obsługującymi JavaScript alert("Mój pierwszy skrypt!"); //Koniec kodu JavaScript --> </script> </head> <body> <p>Pierwszy skrypt</p> 16 </body> </html> Blok <script> Wynik działania skryptu • Umieszczanie bloku - w nagłówku (przy pobieraniu strony będzie ładowany jako pierwszy) lub ciele dokumentu • Dowolna liczba bloków <script> na stronie • Kolejność osadzania skryptów ma znaczenie - będą wykonywane w kolejności umieszczenia na stronie • Przeglądarka moŜe wstrzymywać ładowanie i wyświetlanie strony póki nie wykona skryptu najlepiej skrypty umieszczać na samym końcu (co pomoŜe uniknąć błędów polegających na odwoływaniu się do elementów strony, które jeszcze się nie załadowały) 17 18 3 Metoda document.write sekcji skrypt w <head> Metoda document.write <body> <script type="text/javascript"> document.write("<h1>"); document.write("Oto moja strona WWW"); document.write("</h1>"); </script> <p>OK</p> </body> </html> 19 Validation Error: document type does not allow element "h1" here. <head> ... <script type="text/javascript"> <!-document.write("<h1>"); document.write("Oto moja strona WWW"); document.write("</h1>"); --> </script> </head> <body> <p>OK</p> </body></html> 20 Komentarze w kodzie skryptu JavaScript w przeglądarkach • Komentarz blokowy <script type="text/javascript"> /* ... treść komentarza blokowego... */ </script> • Komentarz wierszowy <script type="text/javascript"> //treść komentarza liniowego... </script> • Komentarz wierszowy moŜe się znaleźć w środku komentarza blokowego: /* //treść komentarza 21 */ • Implementacje JavaScriptu w przeglądarkach dostarczają obiektów pozwalających na: – modyfikowanie zawartości dokumentu (obiekt document) – manipulowanie oknami i wyświetlanie okien dialogowych (obiekt window) – pobieraniem informacji o przeglądarce (obiekt navigator) – obsługę zdarzeń Podstawy języka JavaScript Typy zmiennych 22 • liczbowy (number) - nie ma rozróŜnienia na typy całkowitoliczbowe i rzeczywiste (zmiennopozycyjne). Liczby zapisywane są za pomocą literałów liczbowych • łańcuchowy (string) - w pojedynczym lub podwójnym cudzysłowie • logiczny (boolean) : true,false • specjalny typ null – wartość pusta • RozróŜnianie wielkości liter (domyślna pisownia małymi literami) • Zakończenie instrukcji - opcjonalny znak średnika • Bloki instrukcji – w nawiasach klamrowych {} • Nazwy zmiennych: – mogą zaczynać się od litery, znaku ‘_’ – nie mogą zawierać spacji polskich liter – nie mogą być słowami kluczowymi języka JavaScript • obiektowy 23 24 4 Literały • Literały – wartości zmiennych, np. – literał znakowy "złoty", 'kolor' – literał liczbowy 2.35e-4, 0.1E-1 • Znaki specjalne w literałach znakowych (stałe znakowe) - jak w C \b, \f, \n, \r, \t, \’, \\ • Znak w szesnastkowym kodzie Unicode \uXXXX np. "\u0041" - znak"A" • Przykłady literałów liczbowych – 3.142 liczba zmiennoprzecinkowa – 314E-2 liczba zmiennoprzecinkowa – 26 liczba całkowita – 076 liczba ósemkowa – 0x9F liczba szesnastkowa Definiowanie zmiennych • Definicja zmiennej – słowo kluczowe var (opcjonalne) • Przykłady definiowania zmiennych var liczba; var liczba=7; liczba=7; var cena=10; var waluta="$"; var napis=cena+waluta; • Brak konieczności definiowania zmiennych na początku programu 25 26 Konwersja typów i konkatenacja Operatory • Operatory arytmetyczne: +, -, /, *, % • Operatory zwiększania i zmniejszania: -- , ++ • Operatory porównania: ==, !=, >, <, >=, <= === równe wartością i typem !== róŜne wartością i typem • Operatory logiczne: &&, ||, ! • Operatory przypisania: =, +=, -=, *=, /=, %= • Operatory bitowe: >>, <<, &, |, ^, ~ • JavaScript - język o łagodnej kontroli typów • Zmienne i literały róŜnych typów moŜna bez potrzeby wcześniejszego uzgadniania typów porównywać, łączyć itp. • Łączenie typu znakowego i liczbowego operatorem "+" – wynik typu znakowego • Przykład - najprostszy przypadek konwersji typów: t="2000"; t+=10; //Wynik: t="200010" 27 28 Instrukcja warunkowa i switch Tablice • var nazwa_tab=Array(rozmiar_tablicy); np.: var tablica=Array(10); • tablice o niezdefiniowanej długości moŜna tworzyć za pomocą konstruktora new np. var tab1=new Array(); var tab2=new Array("Rok","2000"); var tablica = new Array("wart1", "wart2", "wart3"); • odwołania do elementów tablicy np.: tab2[0] • numerowanie elementów tablicy od 0 29 • if (warunek) {instrukcje} else if (warunek) {instrukcje} else {instrukcje} • (warunek)?wartość1:wartość2 • switch (zmienna) {case wartość 1: instrukcje;break; case wartość 2: instrukcje;break; ............................ default:instrukcje; } • np. if(liczbaKsiazek >= 5) alert(”Prezent!"); else alert("Dziękujemy!"); 30 5 Iteracje Iteracje - przykłady • while (warunek) {instrukcje} • for(licz=pocz;licz<=koniec;licz++) {instrukcje} • do { instrukcje) while (warunek) var haslo=3384; var prosba="Podaj hasło!"; var odpowiedz=0; while(odpowiedz!=haslo) { odpowiedz=prompt(prosba, ""); } • for dla obiektów (przechodzi przez wszystkie pola danego obiektu - w tym elementy tablicy): for (wlasnosc in obiekt) {instrukcje} 31 Inne instrukcje for (i=1; i<5; i++) { document.write(i+"<br>"); } 32 Funkcje • Przerwanie wykonywania pętli i przekazanie sterowania na jej początek continue • Przerwanie wykonywania pętli i przekazanie sterowania do instrukcji za pętlą break • Instrukcja with with (nazwa_obiektu) {instrukcje} 33 Przykład zastosowania funkcji <html><head> <script type="text/javascript"> function sprawdzkod(kod) { if(kod==1313)return true; return false; } </script></head> <body> <script type=„text/javascript"> var kod=prompt("Podaj kod dostępu"," "); if(sprawdzkod(kod)) alert("właściwy kod!"); else alert("błędny kod!"); </script> 35 </body></html> • Umieszczanie funkcji - w nagłówku dokumentu • Funkcje (zmienne lokalne funkcji deklaruje się jako var, zwracane rezultaty poprzedza się słowem kluczowym return) function nazwa_funkcji(arg1,arg2,...) { instrukcje; return zmienna } function nazwa_funkcji() { instrukcje; return zmienna } 34 Przykład – wynik dzialania 36 6 Zmienne lokalne i globalne JavaScript - Przykład 1 • Zmienne lokalne - występujące w funkcjach (lokalne dla danej funkcji) • Zmienne globalne – występujące poza funkcjami • Zmiennej lokalnej nie moŜna wywołać poza funkcją • np. function piszLublin(tekst){ var nazwa="Lublin: "; //lokalna document.write(nazwa + tekst); return true; } 37 <html> <head> <title>Pierwszy przkład w JavaScript</title> <script type="text/javascript"> function imie() {w=window.prompt("Podaj swoje imie:",""); if (w==""){window.alert("Cześć ANONYMOUS?");} else {window.alert("Cześć "+w+" !!!");} } </script> </head> <body> <h2> PRZYKŁAD 1 </h2> <form action="..." method="post"> <p><input name="imie" type="button" value="imie" onclick="imie()" /> Kliknij 38 </p></form> <hr/> </body> </html> Przykład 1 - wynik Obiekty 39 Dostęp do pól i metod • obiekty definiuje się dwuetapowo - najpierw strukturę obiektu (prototyp) a na podstawie prototypu tworzy się faktyczny obiekt • w JavaScripcie wszystko jest obiektem • Object - podstawowy obiekt • Obiekty JavaScript: – Array (tablica) – String (łańcuch tekstowy) – Number (liczba całkowita lub rzeczywista) – Boolean (wartość logiczna) – Function (funkcja JavaScriptu) – Date (data) 40 – Math (operacje matematyczne). Instrukcja wiąŜąca with • Obiekty JavaScriptu są tablicami asocjacyjnymi • Dostęp do pól obiektów przy uŜyciu dwóch równowaŜnych notacji: obiekt.pole i obiekt["pole"] • metody obiektu (funkcje) są jego polami - dostęp jest moŜliwy przy uŜyciu notacji z kropką lub notacji z nawiasami kwadratowymi • Np. m.metoda1(); m["metoda1"](); • Instrukcje: obiekt.pole1=wartość; obiekt.pole2=wartość; • RównowaŜne: with (obiekt) { pole1=wartość; pole2=wartość; } 41 42 7 Definiowanie własnego obiektu • Aby zdefiniować własny obiekt wystarczy utworzyć funkcję konstruktora: • // funkcja konstruktora function MojObiekt(poleA, poleB) { this.poleA = poleA; this.poleB = poleB; function _metoda1() {alert("mojObiekt::metoda1()");} this.metoda1 = _metoda1; function _metoda2() {alert("mojObiekt::metoda2()");} this.metoda2 = _metoda2; } • utworzenie instancji klasy MojObiekt (operator new): var m = new MojObiekt(2, 3); 43 Obiekty i metody - przykład • funkcja garderoba (konstruktor nowego obiektu) definiuje prototyp obiektu z trzema własnościami zmiennymi materiał, kolor, rozmiar i jedną metodą cena() function garderoba(materiał,kolor,rozmiar) { this.materiał=materiał; this.kolor=kolor; this.rozmiar=rozmiar; this.cena=mcena(); } 44 Obiekty i metody - przykład cd function mcena() //Cena wyjsciowa 10+dodatek zalezny od materialu { var cenawyjsciowa=10; var dodatek=0; if (this.material==‘bawelna’) {dodatek=5.50}; if (this.material==‘akryl’) {dodatek=2.50}; if (this.material==‘lycra’) {dodatek=7.50}; return cenawyjsciowa+dodatek } • Generowanie konkretnego obiektu: sweter=new garderoba(’bawelna’,’czarny’,’M’) • Ustalenie ceny swetra: cenaswetra=sweter.cena() 45 8