一直想系統學習一下JavaScript,總是淺嘗輒止,在遇到問題的時候才去研究一下。剛好要看"JavaScript 核心技術"這本書,就順便記錄一下學習的內容,也許有一些心得體會,也許只是簡單的記錄。
它的歷史我很感興趣,原來JavaScript的這個令無數人混淆的命名源于Netscape和Sun的合作。據介紹,JavaScript最初被開發是為了進行LiveConnect服務器端的開發。Netscape當時想要一種能實現與服務器端構件接口的腳本語言,于是創造了一門語言,起名叫做"LiveScript"。后來,在和Sun的合作之后,Netscape的工程師將LiveScript改名為JavaScript,盡管它過去和現在都和Java沒有關系。關于JavaScript的產生可以參考"JavaScript: How Did We Get Here?"(O'Reilly Network,2001年4月).后來,微軟為了不在技術上落后,也發布了自己的類JavaScript語言版本:JScript。于是開始了跨瀏覽器的兼容問題。比較統一的版本就是1997年6月發布的ECMAScript規范的第一個版本ECMA-262,現在的大部分瀏覽器都能支持這個版本,當然有很多老版本的JavaScript仍在使用,各個瀏覽器還遠遠沒有統一標準。
對于JavaScript的用途,其實很多,驗證表單字段、設置和檢索Web cookie、動態的更改頁面元素的外觀、隱藏和顯示元素、在頁面上移動元素、捕捉用戶事件并相應的調整頁面以及在不離開本頁的情況下與服務器端應用程序進行連接(Ajax)等。
現在開始正式接觸JavaScript。首先JavaScript幾乎總是嵌入到另一種語言環境中,比如HTML和XHTML,也就是說你不能在頁面中隨心所欲的加入JS。首先必須存在的是Script元素標記。代碼如下:
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html>
4 <head>
5 <title> Example 1 </title>
6 <meta http-equiv="Content-Type" content="text/html;charset=utf-t">
7
8 <script type="text/javascript">
9 var dt = Date();
10
11 //say hello to the world
12 var msg = "Hello,World! Today is " + dt;
13 alert(msg);
14 </script>
15 </head>
16
17 <body onload="hello()">
18
19 </body>
20 </html>
并非所有嵌入到Web頁面的腳本都是JavaScript,script標記中包含了一個定義腳本的類型的屬性。type屬性的其它允許值為:
- text/ecmascript
- text/jscript
- text/vbscript
- text/vbs
第一個是JavaScript的另一種說法,接下來是Microsoft在IE中實現的一個JavaScript變種,最后兩個是VbScript。
所有的這些type值都描述了內容的MIME類型。MIME也就是多功能郵件傳遞擴展標準(Multipurpose Internet Mail Extension),這是一個確定內容如何編碼(如text文本)以及內容的特定格式是什么(javascript)的方式。(此概念是從電子郵件技術中產生的,但它很快擴展到其它的因特網用途中,比如指明一個腳本塊中的腳本類型。)
提供了MIME類型,那些能夠處理這一類型的瀏覽器就會執行它,而不那處理這類型的瀏覽器就會跳過這一部分。這確保了腳本只由那些能夠處理它的應用程序訪問。
script標記有幾個有效的屬性,如language、src、defer和charset。以前的language屬性用的很多,如
<script type="text/javascript" language="javascript1.2">
但HTML4.01反對使用language屬性,這其中涉及一項最早的跨瀏覽器技術。
如:
1 <script src="ns4_obj.js" language="javascript1.2"></script>
2
3 <script src="ie4_obj.js" language="jscript"></script>
這樣來區分不同的瀏覽器加載不同的js文件,很勉強。現在,人們偏好轉向一種叫做對象檢測的方式,原理是測試某個特定的對象或對象的屬性是否存在,如果存在,執行1,否則執行2。
chasert屬性定義了腳本使用的字符編碼方式。除非你需要使用的字符編碼方式與文檔所定義的字符編碼方式不同,否則這一屬性通常不用設置。
defer有時候很有用。如果設置defer="defer"的話,它會告訴瀏覽器:腳本不會生成任何文檔內容,瀏覽器可以繼續處理頁面的其它部分,當頁面處理和顯示完成后再返回到腳本。在使用一個較大的JavaScript語句塊或引用一個較大的JS庫時,使用這一屬性有助于加快頁面加載的速度。
最后一個屬性是src,它主要指向外在的JS庫或JS文件,推薦把大部分或者所有的JS代碼寫在JS文件中,如果可以的話,然后用src屬性加載,達到頁面結構和行為的分離。如下:
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html>
4 <head>
5 <title> Example 1 </title>
6 <meta http-equiv="Content-Type" content="text/html;charset=utf-t">
7
8 <script type="text/javascript" src="example.js"></script>
9 </head>
10 <body onload="hello()">
11 </body>
12 </html>
posted on 2008-07-21 23:01
連夜雨 閱讀(348)
評論(3) 編輯 收藏 所屬分類:
JavaScript