以下資料由
JavaScript 程式設計與應用:背景及特色 轉載<br />
9 ^$ b2 v- l& u2 @) j# H* s
---<br />
0 Y8 A' U0 a& u: t* _% ~& ?4 y2 K8 N<br />
; ] l" |" l7 C$ c) N
JavaScript 早期是由 Netscape Communications 公司所開發的一種解譯式程式語言,專門用在網頁中,並在用戶端的電腦執行,以提高網頁的互動性為主要目標。早期的
瀏覽器,例如 Netscape,也只有支援 JavaScript 為主要的客戶端網頁程式語言。而近期的
瀏覽器,例如 IE,通常可以支援兩種程式語言,包含 JavaScript 和 VBScript,但是 JavaScript 還是網頁內訂預設的客戶端程式語言。因此只有 JavaScript 能同時適用於 Netscape 和 IE
瀏覽器,而 VBScript 只能適用於 IE
瀏覽器。
7 y- a i; i/ X<p>
# x( ^* k- z1 T- U- QJavaScript 開始是內嵌於網頁的程式語言,但由於其易學易用,又很接近於一般的 C 和 C++ 語言,所以受到很大歡迎。微軟有鑑於此,又將此此言擴充到其他平台,如 IIS(Internet Information Server,微軟的網頁伺服器)的 ASP(Active Server Pages)和單機可執行的 WSH(Window Scripting Hosts)。因此,JavaScript 可發揮的平台可以說是越來越多,可以列舉如下:
2 V7 l8 u. R* x% e<ul>
2 J1 ?1 y* r# G7 ]1 X<li>用戶端:預設的網頁程式語言,可用於 IE 或 Netscape 瀏覽器。
, G* Q. N0 V5 _( ]<li>伺服器:適用於微軟 IIS 網頁伺服器的 ASP 語言環境,可在網頁送到客戶端之前,進行各種處理,或和資料庫進行資料存取。
1 [6 J/ S- }# R/ B<li>單機版:適用於微軟的視窗作業系統,包含 Windows 98/ME/2000/XP 等,可用於取代原先功能不強的 DOS 批次檔(Batch Files),特別適用於處理日常性或重複型的工作,例如網頁的抓取或帳號的建立,等等。
4 b) o$ J- I' |- J</ul>
* s" \* b+ ^ z4 o4 \; r% @& m, o
<p>
! U' q# E7 q. Q; K由於篇幅有限,本篇教材對於 JavaScript 的介紹,僅限於在用戶端網頁的應用,至於在伺服器端及在單機方面的使用,可參考本書的另外兩篇。因此以下的介紹,均只限於內嵌於用戶端網頁的程式設計與應用。
k! F( D* U9 V+ g/ c! l* s<p>
, p0 v7 E& U0 ~; s5 C. h6 k( k基本上來說,只要是 Netscape 2.0 以上,或是 Explorer 3.0 以上,都可以支援 JavaScript,但是這兩種瀏覽器支援的程度並不完全相同。事實上 IE 所支援的版本是 JScript,這是微軟本身所發展出來的 JavaScript 版本,和 Netscape 的 JavaScript 雖有小異之處,但其特性及語法仍大致相同,因此在本書中,我們暫時可將 JavaScript 與 JScript 視為同一種語言。無論是 JavaScript 或是 JScript,都滿足 ECMA(European Computer Manufacturer's Association,歐洲電腦製造商協會)所提出來的標準,滿足此標準的語言稱為 ECMAScript,當初 Netscape 和微軟也都有參與此語言的制訂。
: Z% l y$ W$ G/ Y; W
<p><fieldset><legend>提示</legend><div class=hint>有關於 ECMA 所制訂的各項電腦相關標準,讀者可以參考 ECMA 的標準規範網頁: "<a target=_blank href=http://www.ecma-international.org/publications/standards/stnindex.htm>
http://www.ecma-international.or ... ndards/stnindex.htm</a>",其中也包含了對於 ECMAScript 的規範文件。</div></fieldset><p>
1 B; u! E9 x. ]* R+ T, Q' o3 }, }& s/ V6 d3 y" ?
JavaScript 在網頁程式設計的主要功能可列舉如下:
; u3 p" u5 B6 c, u A1 u
<ul>
$ b% j* y$ C- W
<li>提高網頁互動性及趣味性,例如以 JavaScript 所發展出來的各種
遊戲。
9 c; l3 Z, S. J- S8 |9 N F
<li>執行在用戶端的計算及驗證,以減少伺服器端的計算及網路流量,例如表單驗證(Form Validation)。
& ]" H3 o% H$ k* s. U. Q6 w6 ?! I& m<li>Cache功能,可將未用到的圖檔(或其他檔案)預先抓回,以增加使用者的便利。
9 }( P9 z! {5 l0 c, z
</ul>
5 ^2 u+ r! X. ?3 y' yJavaScript 語言可以產生各種不同的物件,以及與物件相關的方法與性質,因此此語言可以說是「物件基礎」(Object-based)的程式語言,但並不是「物件導向」(Object-oriented),因為它在物件方面的功能並沒有像 C++ 那麼完全。此外,JavaScript 屬於底稿式語言(Scripting Language),相關的特性可以列表說明如下:
9 ], W2 \$ O# {6 J<ul>
: @2 T, p( s5 V+ J
<li>JavaScript 的程式碼是內嵌於 HTML 原始碼之中,並由瀏覽器的 JavaScript 解譯器(Interpreter)來執行程式碼,最後將結果呈現於瀏覽器。換句話說,JavaScript 的程式碼是由瀏覽器來執行,所以在用戶端絕對看的到 JavaScript 的原始碼,較難加以保護。
0 l% {# q: ` p8 f4 Z. c4 F
<li>由於安全性的考量,除了讀寫 Cookies(請參見篇教材後面的介紹)之外,JavaScript 並無法讀取用戶端的檔案或
硬碟。
; d1 x" {9 g0 z0 y<li>使用變數時,不需要宣告變數型態,JavaScript 會自動決定。
! R( H7 Z1 j8 p6 M5 p" J/ `2 ?
<li>對於不同的資料型態(如字串與數值),JavaScript 可以根據不同情況,自動進行資料型態的合理轉換。
$ T- m x( z, s* \7 E, R9 K
</ul>
- ?7 ]' n: y7 u. {9 N; m; a3 ]<p>
" K5 ]* O8 S; v' O+ w ?& p0 F其他和 JavaScript 功能相近的用戶端程式語言,可列舉如下:
# @8 ]5 H |) x* w/ d# _4 {9 L<ul>
% m, q8 B$ g2 {% P
<li>VBScript: 由微軟發展出的程式語言
4 Y6 V0 |, l3 [# O& }
<li>JScript: 由微軟發展的 JavaScript 版本
, N" ^6 E+ k8 L5 o3 Z
<li>PerlScript: 以 Perl 概念所發展出的程式語言(一般較少用到,因為考慮到用戶端必須先安裝 Perl 解譯器,才能執行)
6 [5 s- h! f5 I" b4 E, H
</ul>
9 D3 w/ Z% M8 a+ C* _' u5 G. m
" W3 F9 f3 H( y- U8 ]" Q<p>
' K) I( v+ m/ ?0 @6 {當 Netscape 在發展 JavaSript 時,Sun Microsystems 公司也正在發展客戶端的程式語言 Java。原先 JavaScript 本名叫做 LiveScript,後來Sun Microsystems 公司研發的 Java 程式語言似乎有一飛沖天之勢,Netscape 乃順天應人,順勢將 LiveScript 改名為 JavaScript。常常有人把 JavaScript 和 Java 混為一談,事實上這兩者除了名字相近外,並無其他關係。以下是一個 JavaScript 和 Java 的比較表,列出兩者相同和相異之處。(如果你是初學者,看不懂此表,也沒有關係,因為這並不影響對後續教材的學習。)
6 g5 l( O( {$ |! I% ]! P5 O
<p>
0 h3 N, i3 }, Z9 m+ o' z: l
<table align=center border=1 cellspacing=0 style="border:1px solid black">
3 |6 q- X# b; F7 m& j; [<TR>
8 N5 O/ B5 H" q. b+ e. ` <TH class=boldw>JavaScript</th>
/ L% |. O) `. j5 k+ | <TH class=boldw>Java</th>
; W9 d6 W- |; C8 A<TR>
: n% y6 u9 n7 D+ ?4 R) J
<TD>Interpreted (not compiled) by client.
/ P$ n+ H% M. T' J <TD>Compiled bytecodes downloaded from server, executed on client.
9 \3 x) o% v a: b; p2 b3 F<TR>
7 l( ^) ~3 ?- t) V% c' B1 l
<TD>Object-based. No distinction between types of objects.
. @: E1 m9 c+ b4 ^- n- X, _
Inheritance is through the prototype mechanism and properties
5 @1 w8 n7 s [: L- Z
and methods can be added to any object dynamically.
* I# q6 V5 c4 o
<TD>Object-oriented. Objects are divided into classes and instances
+ }" r( K$ N: F/ F9 } with all inheritance through the class hieararchy.
: [. M% q, A) e+ M
Classes and instances cannot have properties or methods added
8 x( W/ ]! u( J
dynamically.
# O. n8 S0 F2 S: e2 _1 o* m<TR>
- X! Q) T7 J; B% D5 d% Z <TD>Code integrated with, and embedded in, HTML.
% E) R9 h+ X5 r! ^4 e( Q- I1 T- U o
<TD>Applets distinct from HTML (accessed from HTML pages).
* ^* _) |( ^5 {+ U* D5 b) x3 S
<TR>
% v% u0 }" R* Z0 q' V1 r& i <TD>Variable data types not declared (loose typing).
4 S, F- D3 g0 k8 a! d( B. b: R/ S
<TD>Variable data types must be declared (strong typing).
& {* @* s0 [; T<TR>
7 h. \* e; Z7 L. y9 |
<TD>Dynamic binding. Object references checked at runtime.
7 [$ L( }9 w! X+ r N( x <TD>Static binding. Object references must exist at compile-time.
5 z6 D0 P2 P$ D" M) g<TR>
3 x! d/ J4 b2 j# O- }
<TD>Cannot automatically write to hard disk.
/ m5 |; U3 y/ J; u# c
<TD>Cannot automatically write to hard disk.
+ }( {4 c" o1 e- w</table>
$ I, I h8 m5 V
</blockquote>