一直想系統(tǒng)學(xué)習(xí)一下JavaScript,總是淺嘗輒止,在遇到問(wèn)題的時(shí)候才去研究一下。剛好要看"JavaScript 核心技術(shù)"這本書,就順便記錄一下學(xué)習(xí)的內(nèi)容,也許有一些心得體會(huì),也許只是簡(jiǎn)單的記錄。
它的歷史我很感興趣,原來(lái)JavaScript的這個(gè)令無(wú)數(shù)人混淆的命名源于Netscape和Sun的合作。據(jù)介紹,JavaScript最初被開發(fā)是為了進(jìn)行LiveConnect服務(wù)器端的開發(fā)。Netscape當(dāng)時(shí)想要一種能實(shí)現(xiàn)與服務(wù)器端構(gòu)件接口的腳本語(yǔ)言,于是創(chuàng)造了一門語(yǔ)言,起名叫做"LiveScript"。后來(lái),在和Sun的合作之后,Netscape的工程師將LiveScript改名為JavaScript,盡管它過(guò)去和現(xiàn)在都和Java沒(méi)有關(guān)系。關(guān)于JavaScript的產(chǎn)生可以參考"JavaScript: How Did We Get Here?"(O'Reilly Network,2001年4月).后來(lái),微軟為了不在技術(shù)上落后,也發(fā)布了自己的類JavaScript語(yǔ)言版本:JScript。于是開始了跨瀏覽器的兼容問(wèn)題。比較統(tǒng)一的版本就是1997年6月發(fā)布的ECMAScript規(guī)范的第一個(gè)版本ECMA-262,現(xiàn)在的大部分瀏覽器都能支持這個(gè)版本,當(dāng)然有很多老版本的JavaScript仍在使用,各個(gè)瀏覽器還遠(yuǎn)遠(yuǎn)沒(méi)有統(tǒng)一標(biāo)準(zhǔn)。
對(duì)于JavaScript的用途,其實(shí)很多,驗(yàn)證表單字段、設(shè)置和檢索Web cookie、動(dòng)態(tài)的更改頁(yè)面元素的外觀、隱藏和顯示元素、在頁(yè)面上移動(dòng)元素、捕捉用戶事件并相應(yīng)的調(diào)整頁(yè)面以及在不離開本頁(yè)的情況下與服務(wù)器端應(yīng)用程序進(jìn)行連接(Ajax)等。
現(xiàn)在開始正式接觸JavaScript。首先JavaScript幾乎總是嵌入到另一種語(yǔ)言環(huán)境中,比如HTML和XHTML,也就是說(shuō)你不能在頁(yè)面中隨心所欲的加入JS。首先必須存在的是Script元素標(biāo)記。代碼如下:
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頁(yè)面的腳本都是JavaScript,script標(biāo)記中包含了一個(gè)定義腳本的類型的屬性。type屬性的其它允許值為:
- text/ecmascript
- text/jscript
- text/vbscript
- text/vbs
第一個(gè)是JavaScript的另一種說(shuō)法,接下來(lái)是Microsoft在IE中實(shí)現(xiàn)的一個(gè)JavaScript變種,最后兩個(gè)是VbScript。
所有的這些type值都描述了內(nèi)容的MIME類型。MIME也就是多功能郵件傳遞擴(kuò)展標(biāo)準(zhǔn)(Multipurpose Internet Mail Extension),這是一個(gè)確定內(nèi)容如何編碼(如text文本)以及內(nèi)容的特定格式是什么(javascript)的方式。(此概念是從電子郵件技術(shù)中產(chǎn)生的,但它很快擴(kuò)展到其它的因特網(wǎng)用途中,比如指明一個(gè)腳本塊中的腳本類型。)
提供了MIME類型,那些能夠處理這一類型的瀏覽器就會(huì)執(zhí)行它,而不那處理這類型的瀏覽器就會(huì)跳過(guò)這一部分。這確保了腳本只由那些能夠處理它的應(yīng)用程序訪問(wèn)。
script標(biāo)記有幾個(gè)有效的屬性,如language、src、defer和charset。以前的language屬性用的很多,如
<script type="text/javascript" language="javascript1.2">
但HTML4.01反對(duì)使用language屬性,這其中涉及一項(xiàng)最早的跨瀏覽器技術(shù)。
如:
1 <script src="ns4_obj.js" language="javascript1.2"></script>
2
3 <script src="ie4_obj.js" language="jscript"></script>
這樣來(lái)區(qū)分不同的瀏覽器加載不同的js文件,很勉強(qiáng)?,F(xiàn)在,人們偏好轉(zhuǎn)向一種叫做對(duì)象檢測(cè)的方式,原理是測(cè)試某個(gè)特定的對(duì)象或?qū)ο蟮膶傩允欠翊嬖冢绻嬖冢瑘?zhí)行1,否則執(zhí)行2。
chasert屬性定義了腳本使用的字符編碼方式。除非你需要使用的字符編碼方式與文檔所定義的字符編碼方式不同,否則這一屬性通常不用設(shè)置。
defer有時(shí)候很有用。如果設(shè)置defer="defer"的話,它會(huì)告訴瀏覽器:腳本不會(huì)生成任何文檔內(nèi)容,瀏覽器可以繼續(xù)處理頁(yè)面的其它部分,當(dāng)頁(yè)面處理和顯示完成后再返回到腳本。在使用一個(gè)較大的JavaScript語(yǔ)句塊或引用一個(gè)較大的JS庫(kù)時(shí),使用這一屬性有助于加快頁(yè)面加載的速度。
最后一個(gè)屬性是src,它主要指向外在的JS庫(kù)或JS文件,推薦把大部分或者所有的JS代碼寫在JS文件中,如果可以的話,然后用src屬性加載,達(dá)到頁(yè)面結(jié)構(gòu)和行為的分離。如下:
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
連夜雨 閱讀(347)
評(píng)論(3) 編輯 收藏 所屬分類:
JavaScript