以下資料由
JavaScript 程式設計與應用:背景及特色 轉載<br />
9 f* N1 W- O9 o" @---<br />
- g' f: v5 E/ p4 N9 y<br />
: O& `: a% R' w/ K0 L- NJavaScript 早期是由 Netscape Communications 公司所開發的一種解譯式程式語言,專門用在網頁中,並在用戶端的電腦執行,以提高網頁的互動性為主要目標。早期的瀏覽器,例如 Netscape,也只有支援 JavaScript 為主要的客戶端網頁程式語言。而近期的瀏覽器,例如 IE,通常可以支援兩種程式語言,包含 JavaScript 和 VBScript,但是 JavaScript 還是網頁內訂預設的客戶端程式語言。因此只有 JavaScript 能同時適用於 Netscape 和 IE 瀏覽器,而 VBScript 只能適用於 IE 瀏覽器。
T) j! e( F8 J4 y; S# n* o& `( j
<p>
( X1 r) l3 ?# B" `: R: lJavaScript 開始是內嵌於網頁的程式語言,但由於其易學易用,又很接近於一般的 C 和 C++ 語言,所以受到很大歡迎。微軟有鑑於此,又將此此言擴充到其他平台,如 IIS(Internet Information Server,微軟的網頁伺服器)的 ASP(Active Server Pages)和單機可執行的 WSH(Window Scripting Hosts)。因此,JavaScript 可發揮的平台可以說是越來越多,可以列舉如下:
" H8 i+ c$ S0 p# p$ ?( w
<ul>
* `! C" T' n' Q1 t& w d! }<li>用戶端:預設的網頁程式語言,可用於 IE 或 Netscape 瀏覽器。
$ q( e0 V1 S3 c# m8 M+ y<li>伺服器:適用於微軟 IIS 網頁伺服器的 ASP 語言環境,可在網頁送到客戶端之前,進行各種處理,或和資料庫進行資料存取。
- k: W) f7 `, l9 J* D n<li>單機版:適用於微軟的視窗作業系統,包含 Windows 98/ME/2000/XP 等,可用於取代原先功能不強的 DOS 批次檔(Batch Files),特別適用於處理日常性或重複型的工作,例如網頁的抓取或帳號的建立,等等。
; u5 m" I, Q+ I
</ul>
3 H! Q+ G; P; P* o1 Y<p>
- E; W! ]( z) a7 [4 F" C由於篇幅有限,本篇教材對於 JavaScript 的介紹,僅限於在用戶端網頁的應用,至於在伺服器端及在單機方面的使用,可參考本書的另外兩篇。因此以下的介紹,均只限於內嵌於用戶端網頁的程式設計與應用。
) N9 \6 X7 B Q' j/ ?. ^5 E- G: r<p>
% z2 K! d! ]9 a5 b6 x7 p) V基本上來說,只要是 Netscape 2.0 以上,或是 Explorer 3.0 以上,都可以支援 JavaScript,但是這兩種瀏覽器支援的程度並不完全相同。事實上 IE 所支援的版本是 JScript,這是微軟本身所發展出來的 JavaScript 版本,和 Netscape 的 JavaScript 雖有小異之處,但其特性及語法仍大致相同,因此在本書中,我們暫時可將 JavaScript 與 JScript 視為同一種語言。無論是 JavaScript 或是 JScript,都滿足 ECMA(European Computer Manufacturer's Association,歐洲電腦製造商協會)所提出來的標準,滿足此標準的語言稱為 ECMAScript,當初 Netscape 和微軟也都有參與此語言的制訂。
- \, R( i+ w! p8 {
<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>
6 M% v& P* h. i4 `6 Y; m( T) T% C7 P! { C8 x. c) ?$ c
JavaScript 在網頁程式設計的主要功能可列舉如下:
+ T" C& Q5 U9 c6 S( d8 U) D o<ul>
$ r# f9 }7 G& O; `, Z
<li>提高網頁互動性及趣味性,例如以 JavaScript 所發展出來的各種
遊戲。
. g/ @8 _9 ^" W, \0 H<li>執行在用戶端的計算及驗證,以減少伺服器端的計算及網路流量,例如表單驗證(Form Validation)。
+ i! ]# m) n9 W2 w" d. _
<li>Cache功能,可將未用到的圖檔(或其他檔案)預先抓回,以增加使用者的便利。
. B! C# f9 D4 m: S5 b; b: u/ ?</ul>
0 e7 b( S7 C- Q3 w' x% w& K
JavaScript 語言可以產生各種不同的物件,以及與物件相關的方法與性質,因此此語言可以說是「物件基礎」(Object-based)的程式語言,但並不是「物件導向」(Object-oriented),因為它在物件方面的功能並沒有像 C++ 那麼完全。此外,JavaScript 屬於底稿式語言(Scripting Language),相關的特性可以列表說明如下:
0 F7 f0 }# g, R' D9 p
<ul>
7 I' @) d" b4 P# X; `" I/ b
<li>JavaScript 的程式碼是內嵌於 HTML 原始碼之中,並由瀏覽器的 JavaScript 解譯器(Interpreter)來執行程式碼,最後將結果呈現於瀏覽器。換句話說,JavaScript 的程式碼是由瀏覽器來執行,所以在用戶端絕對看的到 JavaScript 的原始碼,較難加以保護。
. I4 ~* c8 p. b
<li>由於安全性的考量,除了讀寫 Cookies(請參見篇教材後面的介紹)之外,JavaScript 並無法讀取用戶端的檔案或
硬碟。
, a4 e' j* a, w( ?- _$ L) q<li>使用變數時,不需要宣告變數型態,JavaScript 會自動決定。
% N- P' G: L2 K, @<li>對於不同的資料型態(如字串與數值),JavaScript 可以根據不同情況,自動進行資料型態的合理轉換。
8 T, P3 |; Y; h' d6 E) Q</ul>
0 E& e) V8 f/ x% A$ y6 C, u<p>
- C- v9 \3 o) h- Y6 g; `) m
其他和 JavaScript 功能相近的用戶端程式語言,可列舉如下:
$ X e" w3 r4 C& D1 `
<ul>
( C6 T' @% J/ j
<li>VBScript: 由微軟發展出的程式語言
) k% S9 O2 d% O/ _
<li>JScript: 由微軟發展的 JavaScript 版本
3 G, S2 R7 s' G1 d3 ?<li>PerlScript: 以 Perl 概念所發展出的程式語言(一般較少用到,因為考慮到用戶端必須先安裝 Perl 解譯器,才能執行)
5 k4 M, @! D* {6 u6 z0 N( |; J. f
</ul>
7 t- r6 U% [4 v' [3 p
2 `. r% U$ g' e3 X3 ?4 e) F. m<p>
+ ^5 w5 a5 m, b: X0 \0 b2 R當 Netscape 在發展 JavaSript 時,Sun Microsystems 公司也正在發展客戶端的程式語言 Java。原先 JavaScript 本名叫做 LiveScript,後來Sun Microsystems 公司研發的 Java 程式語言似乎有一飛沖天之勢,Netscape 乃順天應人,順勢將 LiveScript 改名為 JavaScript。常常有人把 JavaScript 和 Java 混為一談,事實上這兩者除了名字相近外,並無其他關係。以下是一個 JavaScript 和 Java 的比較表,列出兩者相同和相異之處。(如果你是初學者,看不懂此表,也沒有關係,因為這並不影響對後續教材的學習。)
) o2 I8 d. c3 l6 @8 y<p>
! O1 n" g4 u- G5 c: `<table align=center border=1 cellspacing=0 style="border:1px solid black">
; B- z' s4 @& E4 ^
<TR>
9 h, S: h( [4 `, _4 L5 e) r
<TH class=boldw>JavaScript</th>
) K- E& e1 T5 j5 I( z$ j. D* o' O <TH class=boldw>Java</th>
7 {( y W3 X- y7 J5 r2 x" w' T9 j# K<TR>
5 U7 h4 d& T# E$ t& D; O
<TD>Interpreted (not compiled) by client.
* r& }, A; R* }; q* n8 M <TD>Compiled bytecodes downloaded from server, executed on client.
. f) K: ~; ]& G) Q7 ?1 \) J<TR>
) O& y6 J3 r. q, s <TD>Object-based. No distinction between types of objects.
1 l7 Y, v0 a2 y3 M$ p2 }
Inheritance is through the prototype mechanism and properties
N5 G* Z7 ^0 _8 n L and methods can be added to any object dynamically.
6 t6 e4 Z4 y1 @: U( V <TD>Object-oriented. Objects are divided into classes and instances
2 n; a6 A/ }' D
with all inheritance through the class hieararchy.
) ^ q @% k0 p! R Classes and instances cannot have properties or methods added
/ o" y1 }2 i5 m, Z4 G% k7 T, @ dynamically.
2 P& w0 {, ~, R* i0 }) c i<TR>
4 x6 ^& k9 _0 C- w8 p% a6 X
<TD>Code integrated with, and embedded in, HTML.
. p6 h0 a2 u4 Z8 z# }1 f
<TD>Applets distinct from HTML (accessed from HTML pages).
: {" h5 }. ^7 t; p$ s, w ^* A/ P<TR>
$ F* |# ^5 D: Z
<TD>Variable data types not declared (loose typing).
6 i+ H. }+ N4 P- b- h
<TD>Variable data types must be declared (strong typing).
7 t; a) t, {/ ]6 D4 E+ S
<TR>
* ~9 b7 p4 `* h" q* ?) e
<TD>Dynamic binding. Object references checked at runtime.
4 B" b! @1 _0 r( F1 ]6 V
<TD>Static binding. Object references must exist at compile-time.
, x2 v* j+ w! A- i& V9 D
<TR>
; v; O9 t B I6 z+ Y/ v0 ^& \* t. k* b <TD>Cannot automatically write to hard disk.
- d6 B1 E5 E7 }; c" c6 @( Y
<TD>Cannot automatically write to hard disk.
2 |# m6 U/ C6 k' P( Y+ G</table>
6 {+ g' ~+ O1 S$ O P- T/ p
</blockquote>