《第一章JavaScript基本介绍》由会员分享,可在线阅读,更多相关《第一章JavaScript基本介绍(51页珍藏版)》请在金锄头文库上搜索。
1、第一章JavaScript 基本介紹張智星jangmirlab.orghttp:/mirlab.org/jang台大資工系 多媒體檢索實驗室1/50JavaScript 程式設計與應用:用於網頁用戶端前言n本投影片適用於JavaScript 程式設計與應用,原書連結如下:nhttp:/mirlab.org/jang/books/jsBookn如果你是從此書光碟取得此投影片,可隨時連至上述連結,以取得最新版本的投影片及範例檔案。2 /50JavaScript 程式設計與應用:用於網頁用戶端本章大綱n大綱n本章介紹 JavaScript 的背景及特性,並說明 JavaScript 的執行方式及基本
2、範例。n主題n1-1:背景及特色 n1-2:執行方式一:循序執行 n1-3:執行方式二:事件驅動 n1-4:基本表單 n1-5:JavaScript 和 VBScript 的比較 n1-6:網路資源3 /50JavaScript 程式設計與應用:用於網頁用戶端1-1 背景及特色n本小節說明JavaScript程式語言的發展背景及相關特色。4 /50JavaScript 程式設計與應用:用於網頁用戶端背景nJavaScript程式語言的背景n由 Netscape Communications 公司所開發的一種解譯式程式語言,專門用在網頁中,並在用戶端的電腦執行,以提高網頁的互動性為主要目標n網頁
3、內訂預設的客戶端程式語言。因此只有 JavaScript 能同時適用於 Chrome、FireFox 或 IE 等各大瀏覽器。n滿足 ECMA(European Computer Manufacturers Association,歐洲電腦製造商協會)所制訂的標準。5 /50JavaScript 程式設計與應用:用於網頁用戶端可使用之平台nJavaScript 可發揮的平台n用戶端:預設的網頁程式語言,可用於 Chrome、FireFox 或 IE 等各大瀏覽器。 n伺服器:適用於微軟 IIS 網頁伺服器的 ASP 語言環境,可在網頁送到客戶端之前,進行各種處理,或和資料庫進行資料存取。 n單
4、機版:適用於微軟的視窗作業系統(Win98、ME、2000、XP、Vista、Win7、Win8 等),可用於取代原先功能不強的 DOS 批次檔(Batch Files),特別適用於處理日常性或重複型的工作,例如網頁的抓取或帳號的建立,等等。6 /50JavaScript 程式設計與應用:用於網頁用戶端在網頁程式設計的主要功能nJavaScript 在網頁程式設計的主要功能n提高網頁互動性及趣味性,例如以 JavaScript 所發展出來的各種遊戲或教材。n執行在用戶端的計算及驗證,以減少伺服器端的計算及網路流量,例如表單驗證(Form Validation)。 nCache功能,可將未用到的
5、圖檔(或其他檔案)預先抓回,以增加使用者的便利。nAJAX 功能:在不換頁的情況下來存取伺服器資料並顯示於網頁7 /50JavaScript 程式設計與應用:用於網頁用戶端程式語言特性nJavaScript 語言特性nJavaScript 的程式碼是內嵌於 HTML 原始碼之中,並由瀏覽器的 JavaScript 解譯器(Interpreter)來執行程式碼,最後將結果呈現於瀏覽器。換句話說,JavaScript 的程式碼是由瀏覽器來執行,所以在用戶端可看到其原始碼,較難加以保護。 n由於安全性的考量,除了讀寫 Cookies(請參見本篇教材後面的介紹)之外,JavaScript 並無法讀取用
6、戶端的檔案或硬碟。 n使用變數時,不需要宣告變數型態,JavaScript 會自動決定。 n對於不同的資料型態(如字串與數值),JavaScript 可以根據不同情況,自動進行資料型態的合理轉換。8 /50JavaScript 程式設計與應用:用於網頁用戶端JavaScript vs. JavanJavaScript 和 Java 沒有什麼親戚關係!nJava 之於 JavaScript 的關係,就如同狗和熱狗。(source)n比較表:JavaScriptJava Applets由客戶端的 JavaScript 解譯器進行逐列解譯後執行。 由伺服器取得編譯後的 Bytecode,然後在客戶端
7、由 Java Virtual Machine 執行。 物件基礎(Object-based)的語言,繼承(Inheritance)關係必須經由特殊方式才能達成,性質及方法可以動態地加到一個物件。 物件導向(Object-oriented)的語言,物件可分為類別(Classes)及實例(Instances),繼承關係來自於物件的階層性。類別及實例都無法具有動態產生的性質及方法。 程式碼內嵌於 HTML 網頁之中。 以特殊標籤來將 Java Applets 加入網頁之中。 所有變數不需要事先宣告資料型態,即可逕行指定變數值。 所有變數都必須事先宣告資料型態。 在執行程式碼時,才會檢查所到的物件是否存
8、在。 在編譯程式碼時,即會檢查所用的物件是否存在。 無法讀寫客戶端的硬碟(Cookies 除外)。 無法讀寫客戶端的硬碟。9 /50JavaScript 程式設計與應用:用於網頁用戶端1-2:執行方式一:循序執行n本小節說明如何以循序執行的方式,來執行網頁中的 JavaScript 程式碼。10 /50JavaScript 程式設計與應用:用於網頁用戶端JavaScript 於網頁的執行方式nJavaScript 於網頁執行的兩種基本方式:n循序執行(Sequential Execution): 瀏覽器讀入網頁後,即載入並執行 JavaScript 程式碼,最後將結果直接呈現在瀏覽器上。n事件
9、驅動(Event Driven): 瀏覽器讀入網頁後,即載入 JavaScript 程式碼,但必須等到使用者點選連結或影像,或是啟動其他滑鼠事件(例如當滑鼠離開某個影像),才能觸發 JavaScript 的執行。11 /50JavaScript 程式設計與應用:用於網頁用戶端如何加入JavaScript 於網頁nJavaScript 如何加入網頁JavaScript 程式碼n注意事項n標籤中的大小寫並無任何影響。nlanguage=javascript也可以完全省略。n雖然 HTML 內的 JavaScript 標籤是可以不分大小寫,但是標籤內部的 JavaScript 程式碼本身會區分大小寫
10、,這是要特別注意的地方!12 /50JavaScript 程式設計與應用:用於網頁用戶端範例1-1n主題:利用 JavaScript 來印出 Hello World!n連結:以瀏覽器開啟hello01.htm、localhost、mirlabn程式碼重點str = Hello World!;document.write(str);n說明nstr 是一個字串變數,其值為 Hello World!ndocument 則是一個物件,代表程式碼所在的文件nwrite 則是 document 的一個方法,可將一個字串印出於瀏覽器13 /50JavaScript 程式設計與應用:用於網頁用戶端以物件為基礎
11、的語言nJavaScript 是以物件為基礎的語言n所有的變數在 JavaScript 中都是一個物件n一個物件通常有一些性質(Property)和方法(Method)n範例:把一個微波爐A看成一個物件n性質:n微波爐的顏色:A.colorn微波爐的容量: A.volumen方法:n加熱:“溫水”=A.heat(“冷水”, 30秒)n加熱:“沸水”=A.heat(“冷水”, 300秒)14 /50JavaScript 程式設計與應用:用於網頁用戶端範例1-2n主題:document.write() 和 document.writeln() 的差別n連結:writeln01.htmn程式碼重點d
12、ocument.write(Good); document.write(Bye!);document.writeln(Good); document.writeln(Bye!);n說明nwriteln() 和 write() 的最大差別在於 writeln() 在列印完畢後會換列,但 write() 不會。n如果連續呼叫 document.write(Good) 和 document.write(Bye!),在網頁會呈現連在一起的 GoodBye!,但是如果連續呼叫 document.writeln(Good) 和 document.writeln(Bye!),則在網頁會呈現中間有空格的 Go
13、od Bye!,15 /50JavaScript 程式設計與應用:用於網頁用戶端範例1-3n主題:呈現 JavaScript 印出的原始效果n連結:writeln02.htmn程式碼重點使用 document.write():document.write(Good); document.write(Bye!);使用 document.writeln():document.writeln(Good); document.writeln(Bye!);使用 document.write() 再加上 n:document.write(Goodn); document.write(Bye!n);n說明n
14、使用 和 來包夾 JavaScript 的程式碼,可以得到JavaScript 的原始輸出結果(未經瀏覽器排版), 非常適用於JavaScript 程式碼的偵錯。16 /50JavaScript 程式設計與應用:用於網頁用戶端範例1-4n主題:利用 JavaScript 來印出 size 由 1 到 5 的Hello World!n連結:hello02.htmn程式碼重點/ 由 for 迴圈來產生 5 個由小變大的 Hello World!for (i=1; i=5; i+)document.writeln(Hello World!);n說明nJavaScript 的 for-loop 格式和
15、 C 語言一樣n字串的並排是由+來達成。nJavaScript 有兩種加入註解的方法n單行註解n多行註解17 /50JavaScript 程式設計與應用:用於網頁用戶端範例1-5n主題:利用 和 來印出未經瀏覽器排版的結果n連結:helloXmp01.htmn程式碼重點/ 由 for 迴圈來產生 5 個由小變大的 Hello World!document.write();for (i=1; i=5; i+)document.writeln(Hello World!);document.write();n說明n若要得到未經瀏覽器排版前的 JavaScript 輸出結果,可以使用 和 ,但是對於含
16、有 HTML 標籤的文字資料,我們就必須改用 和 18 /50JavaScript 程式設計與應用:用於網頁用戶端HTML/JavaScript解譯及排版流程JavaScript:解譯及執行瀏覽器:解譯標籤瀏覽器:排版HTML原始碼網頁呈現結果使用來觀看資料範例:helloXmp01.htm使用來觀看資料範例:writeln02.htmHTML/JavaScript解譯及排版流程解譯及排版流程19 /50JavaScript 程式設計與應用:用於網頁用戶端範例1-6n主題:使用註解來隱藏程式碼,使不支援 JavaScript 的瀏覽器不會產生錯誤訊息n連結:hello03.htmn程式碼重點n
17、說明n混合使用 HTML 及 JavaScript 的註解,可以避開無法解譯 JavaScript的瀏覽器。n現在各大瀏覽器都支援 JavaScript,所以使用這種隱藏程式碼的 JavaScript 的程式已經越來越少了。20 /50JavaScript 程式設計與應用:用於網頁用戶端1-3 執行方式二:事件驅動n本小節介紹JavaScript如何用事件驅動來執行程式碼。21 /50JavaScript 程式設計與應用:用於網頁用戶端內建視窗類別nJavaScript提供了三種和使用者互動的內建對話視窗n警告視窗(Alert Window)n確認視窗(Confirm Window)n提示視窗
18、(Prompt Window),或稱為輸入視窗n說明n所謂滑鼠事件(Mouse events),指的是能由瀏覽器偵測到的滑鼠動作,例如點選某一個連結、將游標移到一的影像上、游標的移動等。22 /50JavaScript 程式設計與應用:用於網頁用戶端範例1-7n主題:使用者點選連結會出現罵人的警告視窗n連結: alert01.htmn程式碼重點按了你會後悔喔! n說明n若要讓使用者點選連結來執行 JavaScript 的程式碼,則連結的格式必須是被連結文字n程式碼內的字串(例如上例中!#$%&*!),可用單引號來界定,避免和href=之後的雙引號混淆。 23 /50JavaScript 程式設
19、計與應用:用於網頁用戶端範例1-8n主題:顯示網頁載入時間的警告視窗n連結: alert02.htmn程式碼重點 today = new Date();hour = today.getHours();minute = today.getMinutes();second = today.getSeconds();string = 網頁載入時間是+hour+點+minute+分+second+秒“;n說明n我們產生字串 string,當連結被按下去時,再將字串送至警告視窗。n有關於日期物件和各種時間的用法,會在後面詳述。24 /50JavaScript 程式設計與應用:用於網頁用戶端範例1-9n主
20、題:囉里叭唆的警告視窗n連結: alert03.htmn說明n字串可以用”+”連接在一起,而數字以”+”做相加運算,當數值和字串相加時,數值會被當成字串型態,兩者再用”+”相連接。nJavaScript 可以用雙引號(“)或單引號()來定義字串的開始和結束。n若改用無窮迴圈,在Windows平台可同時按 Ctrl、Alt、Del 三鍵來開啟工作管理員,以關閉瀏覽器。25 /50JavaScript 程式設計與應用:用於網頁用戶端範例1-10n主題:沒完沒了的警告視窗(將執行1000次以上)n連結: alert05.htmn程式碼重點function talk() for (i=0; i1000
21、; i+) alert(第 + (i+1) + 次!); 有膽你就給我按看看! n說明:n可以用javascript:talk()直接呼叫自訂的函式talk()。n如果要快速跳出,請勿壓著Enter鍵,改以ESC鍵壓著,否則程式有可能會再執行一次。26 /50JavaScript 程式設計與應用:用於網頁用戶端範例1-11(1)n主題:使用確認視窗來確認連結動作n連結: confirm01.htmn程式碼重點清大首頁 交大首頁台大首頁 27 /50JavaScript 程式設計與應用:用於網頁用戶端範例1-11(2)n說明n第一種方式呼叫函式link2nthu(),location.href
22、代表瀏覽器的網址,改變即可連到不同網址。n第二種方式直接寫在連結內,若按確定confirm會回傳true連結新網址,取消則回傳false。n第三種使用了 onClick 的屬性,所指定的字串格式是return(程式碼),其中程式碼是一段 JavaScript 的程式碼,只有當此程式碼回傳的值是 true 時,對此連結的點選才會連到指定的網址,否則就完全沒有作用。n除了在用在上述範例之外,一般而言 onClick 可以觸發點擊事件,繼而執行 onClick 屬性字串中的程式碼。28 /50JavaScript 程式設計與應用:用於網頁用戶端範例1-12(1)n主題:使用輸入視窗來決定連結網址n連
23、結:prompt01.htmn程式碼重點course = prompt(請輸入課程代碼:(webProgramming, scientificComputing, MSAR), webProgramming);if (course=webProgramming) | (course=scientificComputing) | (course=MSAR)location.href=http:/mirlab.org/jang/courses/ + course;n說明n我們使用 if 敘述來判斷使用者輸入的字串是否等於 這四種字串。n| 代表邏輯運算的或,而 & 則代表邏輯運算的且,這部分會在後
24、面章節詳述。29 /50JavaScript 程式設計與應用:用於網頁用戶端範例1-12(2)n說明nalert()、confirm() 和 prompt() 都是 window 物件的方法,所以要呼叫這些方法,完整的寫法應該是 window.alert()、window.confirm() 和 window.prompt(),因為他們太常被用到,所以可以省略 window 此物件,直接呼叫這些函數。30 /50JavaScript 程式設計與應用:用於網頁用戶端1-4:基本表單n本小節介紹表單(form)各種元件的寫法以及使用方法。31 /50JavaScript 程式設計與應用:用於網頁用
25、戶端formn基本結構 n說明n表單是由 form 標籤所形成,可包含數個表單元件,而這些元件大部分是使用 input 標籤。ninput標籤可以不寫在form標籤裡面,但是這樣會失去傳送表單的功能(後面ASP的章節會提到)。32 /50JavaScript 程式設計與應用:用於網頁用戶端範例1-13n主題:基本表單範例n連結:form01.htmn說明nform標籤中,action代表表單傳送的目的位址(也就是處理表單資訊的伺服器程式),method 則代表傳送方法,encType是資料編碼格式。ninput標籤中,name是標籤的變數名稱,在之後操作javascript的時候會更常用到。n
26、type是表單元件的型態,如果沒有指定預設是單行文字(text),剩下的之後會列表說明。33 /50JavaScript 程式設計與應用:用於網頁用戶端範例1-14(1)n主題:將文字欄位的內容送到瀏覽器狀態列n連結:formText2status01.htmn程式碼重點n說明nonClick中,document 是此文件,theForm 是我們定義的表單名稱,theString 也是我們定義的文字欄位名稱,而 value 則是文字欄位內建的一個性質名稱,因此 document.theForm.theString.value 就是指文字欄位中的文字。34 /50JavaScript 程式設計與
27、應用:用於網頁用戶端範例1-14(1)n說明n將此文字送到狀態列:直接設定 window.status 即可。n在嘗試本範例時,你必須先顯示瀏覽器的狀態列nIE 10: 可經由Alt/檢視/工具列/狀態列來開啟或關閉瀏覽器的狀態列nChrome: How? (請同學們幫忙找答案!)n網頁內如果有多個表單,我們可以分別使用document.formsn來表示,其中 n = 0, 1, 2 等等。通常一個網頁只有一個表單,因此我們不定義此表單的名稱,也可以直接使用 document.forms0 來代表此表單。 35 /50JavaScript 程式設計與應用:用於網頁用戶端範例1-15n主題:使
28、用 onChange 事件將文字欄位送到狀態列n連結: formText2status02.htmn程式碼重點n說明n文字轉換的動作定義於文字欄位的 onChange 屬性,可以省掉按鈕的使用(此事件只有在文字欄位失去滑鼠焦點時才會起作用)。n我們可以使用 this 來代表目前元件(即 this 所在之元件),使網頁更為簡潔。n在上述範例中,如果希望在文字欄位填入文字時,狀態列能夠立即改變,可將 onChange 改成 onKeyUp 即可。36 /50JavaScript 程式設計與應用:用於網頁用戶端範例1-16n主題:使用 this.form傳送兩個文字欄位的訊息n連結: formTex
29、tMasterSlave01.htmn程式碼重點 onClick=this.form.text2.value=this.form.text1.value n說明nthis.form 就是代表按鈕所在的表單n一般而言,以a.b的方式來指到一個物件,例如 form1.input1 等,是由大(表單)到小(控制項)的方式,但唯一的例外,就是 this.form,這是由小(控制項)到大(表單)的方式。37 /50JavaScript 程式設計與應用:用於網頁用戶端範例1-17n主題:使用 this.form,傳送兩個核記欄位的訊息n連結1: formCheckboxMasterSlave01.htmn
30、連結2: formCheckboxMasterSlave02.htmn程式碼重點 onClick=this.form.box2.checked=this.form.box1.checked onClick=document.myForm.box2.checked=document.myForm.box1.checkedn說明nchecked 的值,true 代表勾選,false 代表不勾選。n如果不是用 this.form ,程式碼比較繁雜(連結2)。38 /50JavaScript 程式設計與應用:用於網頁用戶端範例1-18n主題:單選的下拉式選單n連結: formSelectSingle0
31、1.htmn程式碼重點 1. Linear Algebran說明n下拉式選單不是使用input標籤,而是用select和option。noptionsn代表select中第幾個option標籤。nselectedIndex代表所選取option標籤的index值。39 /50JavaScript 程式設計與應用:用於網頁用戶端範例1-19n主題:多選的下拉式選單n連結: formSelectMultiple01.htmn程式碼重點n說明n從單選變多選只要加入multiple屬性。nlistSummary()函式中,我們在 result 變數之前加上了 var,這代表 result 是一個區域變
32、數(Local Variable),如果沒有,這個變數就預設成全域變數(Global Variable),可以在函式以外的任何地方存取此變數。n一般我們建議在函式內的變數都盡量設定成局部變數,以減少函式呼叫後可能產生的非預期副作用。40 /50JavaScript 程式設計與應用:用於網頁用戶端範例1-20n主題:多列文字欄位(textarea)n連結: formTextarea01.htmn程式碼重點 This is the text within the textarea tag. 這是位於 textarea 標籤內的文字。 n說明n和select一樣,不用input標籤。41 /50Ja
33、vaScript 程式設計與應用:用於網頁用戶端表單元件一覽表型態說明備註button按鈕物件checkbox核取方塊物件file檔案上傳物件hidden隱藏資訊物件selectoption選單物件不使用input標籤password密碼物件radio選取按鈕物件reset重設表單按鈕submit送出表單按鈕text單行文字欄位textarea多行文字欄位不使用input標籤42 /50JavaScript 程式設計與應用:用於網頁用戶端1-5:JavaScript 和 VBScript 的比較n本小節主要解釋 JavaScript 和VBScript在寫作上的差異性。43 /50JavaSc
34、ript 程式設計與應用:用於網頁用戶端JavaScript 和VBScript差異(1)nJavaScript 程式碼會分辨大小寫,VBScript 程式碼則不分大小寫。一般高階程式碼(如 C/C+ 等),都會分辨大小寫,因此 VBScript 不區分大小寫,是一個較大的缺失。n範例(jsVbsComp01.htm)xyz = 0Xyz = 1XYZ = 2說明n這段程式碼在兩種script中所產生的結果不同。44 /50JavaScript 程式設計與應用:用於網頁用戶端JavaScript 和VBScript差異(2)nVBScript 不能把多項敘述寫在同一列,每列敘述尾端不需加分號。
35、nJavaScript可以把多項敘述寫在同一列,但是每個敘述間要用結尾。若每行如果只有一個敘述,則尾端之分號可以省略。n範例(jsVbsComp02.htm)45 /50JavaScript 程式設計與應用:用於網頁用戶端JavaScript 和VBScript差異(3)nJavaScript 的語法接近 C 或 C+ 程式語言,VBScript 則接近於 Basic 程式語言。nJavaScript 適用大部分的瀏覽器(Chrome、Firefox、 IE、Opera、Netscape 等),但 VBScript 則只能用在 IE 瀏覽器。因此若為了跨瀏覽器平台,選用 JavaScript
36、是正確的抉擇。nJavaScript 和 VBScript 兩者都適用於 ASP(Active Server Pages) 和 WSH(Window Scripting Hosts)。46 /50JavaScript 程式設計與應用:用於網頁用戶端1-6:網路資源n本小節介紹幾個有關於 JavaScript 的重要網址,以便查詢最新的資訊。47 /50JavaScript 程式設計與應用:用於網頁用戶端網路資源(1)nhttp:/ Netscape 的官方網站,裡面有對於 JavaScript 的完整說明,包含使用手冊和參考資料等,都可以免費下載回來,安裝在自己的電腦,就不必再上網查詢了。 n
37、http:/ Microsoft 的官方網站,稱為 MSDN(Microsoft Developer Network),裡面提供了在 Microsoft 出產的平台上,對於程式開發者的所有線上支援,所以當然也包含了 JavaScript 和 VBScript。你可以在網頁左邊的選單選取Web Development/Scripting/Downloads,就可以在網頁右邊看到許多可以下載的腳本引擎、公用程式與說明手冊等。 nhttp:/www.ecma-international.org/publications/standards/stnindex.htm這是 ECMA(European C
38、omputer Manufacturers Association,歐洲電腦製造商協會)對於各種電腦軟體或協定的標準規範,裡面也包含了對於 ECMAScript 的規範文件。 48 /50JavaScript 程式設計與應用:用於網頁用戶端網路資源(2)nhttp:/ Web 程式設計所需的工具或參考資料都很詳盡。對於 JavaScript 也有完整說明和範例,編排組織都很清楚。n http:/這也是一個內容以 Web 程式設計為主的網站,內容很多,當然也包含完整的 JavaScript 說明和範例,深入淺出,很容易瞭解。 nhttp:/這也是一個綜合性的網站,內容以 Web 程式設計為主,也
39、包含了各種 JavaScript 說明和範例。 49 /50JavaScript 程式設計與應用:用於網頁用戶端網路資源(3)nhttp:/這也是一個綜合性的網站。 nhttp:/由網址就可以知道這是以 JavaScript 為中心的網站,三不五時可以找到很有趣的 JavaScript 程式碼。 nhttp:/這也是以 JavaScript 為中心的網站,有很多範例程式,還有較進階的說明和範例,適合高手。 50 /50JavaScript 程式設計與應用:用於網頁用戶端網路資源(4)nhttp:/ JavaScript 的範例程式,介紹很完整。 nhttp:/此網站包含了很多現成的程式碼,是程式發展者的交換中心。 nhttp:/ DHTML 的範例,例如改變網頁拉霸的顏色、顯示漸進式長條圖等。 51 /50