javascript基礎知識總結

1.1  什麼是腳本語言

在學習JavaScript之前,首先來了解一下腳本語言(Scripting Language)。腳本語言就是一種簡單的程序,它由一些ASCII碼組成,並可以用“記事本”等文本編輯器直接對其進行開發。

有些程序,如CC++Java等則必須先經過編譯,將源代碼轉換爲二進制代碼之後纔可執行。而像PerlJavaScriptVBScript等則不需要事先編譯,只要利用合適的解釋器便可以執行代碼。

網站發展的初期,所有的程序都是在服務器端執行,然後再將執行結果發送到客戶端。隨着客戶端計算機的功能越來越強大,CPU速度越來越快,如果將部分簡單的操作交給客戶端的計算機處理,這樣就可以大大提高服務器的工作效率。這時候網頁腳本語言就應運而生了,因爲這種腳本語言能夠與一般的HTML語言交互使用。在讀取網頁的同時,腳本語言編寫的小程序也被傳輸到客戶機上,並在客戶機上執行。

1.2  JavaScript簡介

JavaScript早期是由Netscape(網景)公司研發出來的一種在Netscape瀏覽器上執行的程序語言。它不僅包含了數組對象、數學對象,還包括一般語言所包含的操作數、控制流程等結構組件。用戶可以利用它設計出交互式的網頁內容,但這些網頁不能單獨執行,必須由瀏覽器或服務器執行。

開發JavaScript的最初動機是想要減輕服務器數據處理的負荷,能夠完成如在網頁上顯示時間、動態廣告、處理表單傳送數據等工作。隨着JavaScript所支持的功能日益增多,不少網頁編制人員轉而利用它來進行動態網頁的設計。Microsoft公司所研發的IE網絡瀏覽器在以前的版本中是不支持JavaScript語言的,但在IE 4.0之後也開始全面支持JavaScript,這使得JavaScript成爲兩大瀏覽器的通用語言。

從結構來說,JavaScript是一種基於對象和事件驅動的安全腳本語言。使用它的目的是與HTML超文本標記語言和Java腳本語言一起實現在一個Web頁面中鏈接多個對象,起到與Web客戶的交互作用,從而可以開發客戶端的應用程序等。

在上面已經提到JavaScript只能在HTML腳本中才能得以執行。那麼,如何在HTML語言中植入一個JavaScript腳本呢?以下是一個JavaScript腳本結構示例:

<script language="JavaScript">

……

</script>

Language指定了一個JavaScript語言。但現在也可以不用寫該屬性,因爲目前大部分瀏覽器都將其設爲默認值。一段JavaScript代碼可以放置於HTML中的任意部位,但多數情況下將其放於<HEAD></HEAD>區段中。因爲一些代碼可能需要在頁面裝載起始就開始運行。但如果願意,放置在任何位置都是可以的,甚至可以在HTML外部裝入一個JavaScript程序。如下例所示:

<script language="JavaScript" src="url">

……

</script>

這裏的url就是一個外部的JavaScript程序,在Netscape中只承認以後綴名爲.js的程序,而IE對這個要求就比較寬鬆,只要它符合MIME格式即可。如果有很多的頁面需要該段程序,只需編寫一個外部程序就可以在多個頁面中進行調用。當一句代碼結束後應在末尾添加一個分號,表示一個完整的句子,也可以將其省略,這樣並不影響程序的運行。在程序中的//<--……-->標記則是一段註釋的開始。Example.htmJavaScript的一個簡單實例。代碼如下:

<html>

<head>

<title>這是一個JavaScrip程序的例子!</title>

</head>

<body>

<script language="JavaScript">

document.write("<h1>歡迎學習JavaScript</h1>");

</script>

<img src="E:\javascript\001.gif">

</body>

</html>

Example.htm的運行結果如圖1-1所示。

 

1-1  JavaScript實例

1.3  JavaScriptJava的關係

常常會有人問到JavaScriptJava有什麼區別,甚至有人誤認爲JavaScript就是Java。雖然JavaScriptJava確實有一定的聯繫,但它們並不像我們所想象的那樣聯繫緊密。甚至可以肯定地說它們有很大的區別。JavaScriptJava的區別主要表現在以下幾個方面:

q JavaScriptJava是由不同的公司開發的不同產品。JavaScriptNetscape公司的產品,其目的是爲了擴展Netscape Navigator功能。Java是由Sun Microsystem公司開發的一種面向對象的程序設計語言,類似於C++,它需要多種編譯器和支持文件才能運行。

q JavaScript是基於對象的,它是一種腳本語言。它基於對象和事件驅動,因而它本身提供了非常豐富的內部對象供設計人員使用。而Java是面向對象的,即Java是一種真正的面向對象的語言,即使是開發簡單的程序也必須設計對象。

q JavaScriptJava在瀏覽器中所執行的方式不一樣。JavaScript是一種解釋性編程語言,其源代碼在發往客戶端執行之前不需經過編譯,而是將文本格式的字符代碼發送給客戶端,即JavaScript語句本身隨Web頁面一起下載下來,由瀏覽器解釋執行。而Java的源代碼在傳遞到客戶端執行之前,必須經過編譯,因而客戶端上必須具有相應平臺上的仿真器或解釋器,它通過編譯器或解釋器實現獨立於某個特定的平臺編譯代碼。

1.4  JavaScript的基本構成

JavaScript腳本語言同其語言一樣,有它自身的基本數據類型、表達式和算術運算符以及程序的基本框架結構。JavaScript提供了5種基本的數據類型用來處理數字和文字而變量提供存放信息的地方表達式則可以完成較複雜的信息處理。

1.4.1  基本數據類型

JavaScript中的基本數據類型可分爲5種。

數值型:整數和浮點數統稱爲數值。所謂數值就是由數字及正負號所組成的數據類型,例如853.1415926等。

字符串型:是由多個單一的字符所組成的數據類型。在JavaScript中,“"”“'”括起來字符或數值,如"您好"、"學習'JavaScript' "等。

q 邏輯(布爾:用truefalse表示

null:它是JavaScript的保留值。因爲JavaScript的大小寫敏感性,因此它不同於如NullNULL等其他變量需要特別注意的是,null既不等於“0”,也不等於“空字符串”。

未定義(undefined)值:該值的頂級屬性是未定義的,它也是一個保留值。在兩種情況下可能得到一個未定義的值,一種是根本不存在的對象,另一種就是雖然已經聲明,但卻沒有賦值。

JavaScript基本類型中的數據可以是常量,也可以變量。由於JavaScript採用弱類型的形式,因而一個數據的變量或常量不必作聲明,而是在使用或賦值時確定其數據的類型。用戶可以先聲明該數據的類型,然後進行賦值

1.4.2  變量

變量(Variable)又稱爲標識符,是對應到某個值的符號。因爲它所對應的值可能隨程序的進行而變化,所以稱爲變量。變量的名稱必須以大、小寫的英文字母或下劃線開頭,但不能以數字開頭,後面可以接數字或字母。由於JavaScript區分大小寫,所以Aa將被視爲兩個不同的變量。

1.變量定義

JavaScript聲明一個變量時,可以使用以下方式實現:

var Up,Down,Left,Right;

也可以直接給它賦值,如下:

x=3;

2.變量的作用範圍

當在一個函數之外定義一個變量,那這個變量就叫做全局變量。全局變量可用於當前所有的文檔。在函數內部定義的變量則叫做局部變量,它只作用於函數內部。用戶可以通過指定窗口或框架的名字調用全局變量。例如,當一個框架文檔中定義了名爲phoneNumber的全局變量時,用戶在子框架中就可以使用parent.phoneNumber引用該變量。

1.4.3  常量

JavaScript中用常量(Literals)來描述數值。常量是一些固定不變的值,不像變量那樣隨着程序的進行而變化,所謂常量就是保持不變的量。常量大致可分爲以下幾種:

1整型常量

JavaScript的常量通常又稱字面常量,它是不能改變的數據。其整型常量可以使用十六進制、八進制和十進制表示其值。

2.數組常量

一個數組常量是零或更多表達式的列表,它包含在一對方括號內。當使用數組常量來創建一個數組時,它的元素和長度即由所指定的值進行初始化。下面來看一個具體的例子,該例題有3個元素,其長度爲3

apple=["fruit","China","vitamin"]

不必在數組常量中指定所有的元素。如果在一行中輸入兩個逗號,它會自動爲沒有指定的元素留出空間,如下例所示:

God=["Belial",,"Angel"]

該數組包含兩個元素值和一個空元素,但要注意的是,如果把逗號放到數組的最後,那它將會被忽略不計。

3.布爾常量

布爾類型只有兩種值:truefalse它主要用來說明一種狀態或標誌,以說明操作流程。JavaScriptC++是不一樣的C++可以用10表示其狀態JavaScript只能用truefalse表示其狀態。


4.浮點數常量

一些浮點數組的例子就像後面給出的例子一樣,如3.1415926-3.1E121e122E-12等。指數部分是在一個整數後跟一個“e”或“E”,它可以是一個有符號的數。一個浮點數組必須包含一個數字、一個小數點或“eE)”。

5.整數

一個整數可以是十進制、十六進制和八進制數。一個十進制常量由一串數字序列組成,它的第一個數字不能爲0;如果第一個數字爲0,則表示它是一個八進制數;若爲0x,則表示它爲一個十六進    制數。

6.字符串常量

字符串常量是零或若干封裝在"”或“'”內的字符。如"ball"、'ball'、"6682"、"a line"等。可以在字符串常量中調用任何“字符對象”,而JavaScript會自動將字符串常量轉換爲一個臨時字符常量。

7.特殊字符

C語言一樣,JavaScript中同樣有些以反斜槓/開頭的不可顯示的特殊字符通常稱爲控制字符。

1.4.4  表達式

表達式由常量、變量或運算符所組成,並生成一個單一值。如果一個語句返回一個值,那麼它就是一個表達式。該值可能是一個數值、字符串或一個邏輯值。表達式有兩種類型:一種是給變量賦一個值,另一種僅是一個簡單值。例如,表達式3+4簡單賦值爲73.14也是一個表達式;複雜一點的表達式如x=7,即給變量x賦值爲7JavaScript的表達式有如下幾種類型:

數學表達式:計算值爲數字,如8.45

字符串表達式:計算值爲一個字符串,如"computer"

邏輯表達式:計算值爲truefalse

1.4.5  運算符

JavaScript具有一元和二元兩種運算符。二元運算符有兩個操作對象,如3*4;一元運算符只有一個操作對象,如i++++i。另外,JavaScript還有三元運算符,而它則具有3個操作對象。

1.賦值運算符

賦值運算符是將右邊的操作數賦予左邊的操作對象,如x=y是將y的值賦給x。賦值運算符還具有簡寫形式,見表1-1

1-1  賦值運算符

運算符縮寫形式

含    義

x+=y

x=x+y

續表

運算符縮寫形式

含    義

x-=y

x=x-y

x*=y

x=x*y

x/=y

x=x/y

x%=y

x=x%y

x<<=y

x=x<<y

x>>=y

x=x>>y

x>>>=y

x=x>>>y

x&=y

x=x&y

x^=y

x=x^y

x|=y

x=x|y

 

2.比較運算符

比較運算符比較它的操作對象並返回一個邏輯值。操作對象既可以是數字也可以是字符串值。字符串的比較使用Unicode值按照字母順序進行,見表1-2

1-2  比較運算符

運  算  符

描    述

示    例

等號(==

如果操作對象相等返回true,如果兩個操作對象不爲同一類型,JavaScript將嘗試轉換它們爲一個適當的類型

5==var1

"5"==var1

5=='5'

不等於(!=

兩個操作對象不相等,返回true

var1!=8

var2!="5"

絕對相等(===

如果操作對象相等並且類型相等,返回true

5===var1

絕對不等(!==

如果操作對象不相等並且/或不是同一類型,返回true

var1!=="5"

5!=='5'

大於(>

如果左邊的操作對象大於右邊的操作對象,返回true

var2>var1

大於或等於(>=

如果左邊的操作對象大於或等於右邊的操作對象,返回true

var2>=var1

var1>=5

小於(<

如果左邊的操作對象小於右邊的操作對象,返回true

var1<var2

小於或等於(<=

如果左邊的操作對象小於或等於右邊的操作對象,返回true

var1<=var2

var2<=7

 

3.算術運算符

算術運算符將數字值(常量或變量)作爲操作對象並返回一個單一數字值。算術運算符見表1-3


1-3  算術運算符

運  算  符

描    述

實    例

%(取模)

二進制運算符,返回整數除法的餘數

15%4返回3

++(增量)

一元運算符,操作對象加1;如果是前置++i,返回增量後的值,如是後置i++,返回增量前的值

i7++i返回8,而i++則返回7

--(減量)

一元運算符,操作對象減1;如果是前置--i,返回減量後的值,如是後置i--,返回減量前的值

i7--i返回6,而i--則返  回7

-(取反)

一元運算符,返回操作數的反數

i7,那麼-i返回-7

 

4.按位運算符

按位運算符對操作數進行二進制數的位層運算,在比較兩個值之前先將它們轉化爲二進制數,見表1-4

1-4  按位運算符

運  算  符

用    法

描    述

按位與

a&b

當兩個操作數的每個對應位都爲1時返回1

按位或

a|b

當兩個操作數的對應位任意一個爲1時返回1

按位異或

a^b

當兩個操作數的對應位其中一個不爲1且不全爲1時返回1

按位非

~a

將操作數按位反轉

左移

a<<b

將二進制數a左移b位,右邊補零

帶符號位右移

a>>b

將二進制數a右移b位,丟棄移動位

首位0填充右移

a>>>b

將二進制數a右移b位,丟棄移動位,並左邊補零

 

下面先來看一下按位邏輯運算符是用什麼方法進行工作的:先將操作數轉化爲二進制數並由01來表示,然後再將第一個操作數與第二個操作數之間按對應位進行操作,最後對運算符按對應位進行運算,結果按位配對。下面是一些按位運算的例子:

13&11結果爲91101&1011=1001

13|11結果爲151101|1011=1111

13^11結果爲61111^1001=0110

按位移位運算符包括兩個運算對象:第一個是被移位的量,第二個指定第一個對象被移動的位的數目。移位運算符將操作數轉換爲二進制數,並返回同左邊類型相同的結果,見表1-5

1-5  移位運算符

運  算  符

描    述

實    例

<<(左移)

運算符按指定的數目按位左移第一個操作數,左移多餘的位被丟棄,右邊補零

11<<2結果爲44,因爲1011左移2位將變爲101100,十進制爲44

 

 

續表

運  算  符

描    述

實    例

>>(帶符號位右移)

運算符按指定的數目按位左移第一個操作數,多餘位被丟棄,最左邊的位移到左邊

11>>2結果爲2,因爲1011右移2位變爲10,十進制數爲2。同樣地,-11>>2結果爲-3,因爲符號位被保留了

>>>(零填充右移)

運算符按指定的數目按位左移第一個操作數,多餘位被丟棄,從左邊補入0

13>>>2結果爲4,因爲1101右移2位爲11,十進制數爲3

 

5.邏輯運算符

通常邏輯運算符返回一個布爾值,但是&&”和“||”運算符還可以返回其中一個指定的操作數的值,見表1-6

1-6  邏輯運算符

運  算  符

用    法

描    述

&&

表達式1&&表達式2

邏輯與,如果它能轉換爲false,返回表達式1,否則返回表達式2;如果兩個表達式都爲真,&&返回true,否則返回false

||

表達式1||表達式2

邏輯或,如果它能轉換爲true,返回表達式1,否則返回表達式2;如果兩個表達式都爲真,||返回true,否則返回false

!

!表達式

邏輯非,如果表達式能轉換爲true,將返回false,否則返回true

 

6.字符串運算符

除了比較運算符外,用於字符串值的還有連結運算符,其將兩個字符串值連結在一起。例如"好好"+"學習"就返回"好好學習"。此外,還可以使用簡寫的方式(+=)來進行表達。

7.特殊運算符

JavaScript特殊運算符包括以下幾種類型:條件運算符、逗號運算符、delete、new、this、typeof、void。

當同一個命令行中存在多個運算符時,用戶必須考慮運算符的優先級。優先級指的是複合運算進行計算時的先後順序,對於所有的二元運算都是從左到右進行計算,當然也可以用圓括號來忽略優先級。表1-7給出了運算符及運算符類型。

1-7  運算符及運算符類型

運算符類型

運  算  符

逗號

,

賦值

=、+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、^=、|=

條件

?:

邏輯或

||

邏輯與

&&

按位或

|

續表

運算符類型

運  算  符

按位異或

^

按位與

&

等於/不等於

==、!=

比較

< <=、> >=

按位移位

<<、>>、>>>

/

+、-

/

*、/、%

/增減量

!、~、-、+、++、--、typeof、void、delete

調用

( )

創建

new

成員

. []

1.5  JavaScript的基本語法

JavaScript的語法同其他編程語言類似,主要包括條件選擇、循環、跳出3大類。下面將介紹構成這些語法的常用語句。

1.5.1  if條件選擇語句

ifelse語句,如果條件爲true,則執行if段語句;若爲false,則執行else段語句。用法如下:

if(條件判定)

{

……語句1(條件爲true時);

}

else

{

……語句2(條件爲false時);

}

ifelse語句條件的結果值可以是truefalseJavaScript表達式。表達式可以是任何可執行的JavaScript語句,還可以在任意層被嵌套。具體實例如下面的IF.htm所示:

<script language="JavaScript">

function checkData ()

{

if (document.form1.three.value.length==3)

alert("OK!有效!");

else

{

alert("請輸入三個字符,“"+document.form1.three.value+"”無效!");

return false

}

}

</script>

<form name="form1">

<center>

請輸入字符:<input type="text"name="three"onChange="checkData()">

</center>

</form>

IF.htm文件的文本框內輸入3個字符,單擊鼠標左鍵,就會彈出一個警告框,如圖1-2所示。否則就會彈出無效對話框,如圖1-3所示。

         

1-2  有效的輸入                                    圖1-3  無效的輸入

1.5.2  switch選擇語句

switch語句允許程序給表達式求值,並用case標記來匹配表達式可能的值。如果匹配成立,程序將執行相應的語句。具體用法如下:

switch(表達式)

{

case:語句

break;

case:語句

break;

……

default:語句

}

下面來看一下switch語句執行的流程。如果case的值等於表達式的值,則執行它相應的語句;否則繼續執行,直到遇到一個break語句,或者switch語句結束。這就是說如果沒有使用break語句,那麼將會出現多個case一起被執行的情況。如果沒有case等於表達式的值,則跳轉到default;如果在default也沒有的情況下,則跳轉到最後一步,繼續執行switch代碼末尾的語句。下面就來看一個switch語句的例題。

<script language="JavaScript">

{

for(i=0;i<6;i++)

switch(i)

{

case 0:

document.write("i is 0.<br>");

break;

case 1:

document.write("i is 1.<br>");

break;

case 2:

document.write("i is 2.<br>");

break;

case 3:

document.write("I is 3.<br>");

break;

default:

document.write("i is greater than 3.");

}

}

</script>

在上面的實例中,switch語句共執行了5次,每執行一次case就會換行。該語句一共執行了5次,但只有4case,所以default被執行了兩次,如圖1-4所示。

 

1-4  switch選擇語句

1.5.3  do…while語句

dowhile將對語句進行循環執行,直到條件爲false爲止。用法如下:

do

{

語句

}

while(條件判斷)

首先執行一個語句,然後重複循環執行該語句,直到條件表達式爲false。下面來看一個do…while語句的實例。如下:

<script language="JavaScript">

var i=0;

do

{

i+=1;

document.write (i+"<br>");

}

while (i<10);

</script>

上面這個例子實現了從1~10的輸出,do…while與while循環語句實現的結果很相似,所以一般不用do…while語句,而使用while循環語句。程序的執行結果如圖1-5所示。

 

1-5  do…while語句

1.5.4  while循環語句

while語句只執行一個語句,直到指定的條件爲false爲止。其用法如下:

while(條件)

{

語句

}

該語句與 dowhile語句不同的是,它將在語句開始執行時檢查條件是否爲true,如果條件爲false,它將不會執行下面的語句。下面就來看一個while循環語句的例子。

<sript language="JavaScript">

var loop=0;

while (loop<5)

{

document.write("<h1> while循環語句</h1>");

loop++;

}

</script>

在上例中將字體循環5次之後,退出程序執行,如圖1-6所示。


1-6  while循環語句

1.5.5  for循環語句

for語句執行語句循環,直到條件爲false爲止。用法如下:

for([初始表達式];[條件];[增量表達式])

{

語句

}

for語句的初始表達式由一個表達式構成,該表達式只在執行循環前被執行一次。條件是一個布爾表達式,如果值爲true,則下面的語句被執行;若爲false,則循環結束。增量表達式在每次循環完後執行。語句是條件的值爲true時要執行的語句,它可以是複合語句。下面就來看一個for語句的例子。

<script language="JavaScript">

for(i=0;i<10;i++)

{

document.write("<h2><font color=red>for循環語句例題演示</font></h2>");

}

</script>

在上例中將字體循環10次之後,退出程序執行,如圖1-7所示。從這個例子中可以看出,for循環語句與while循環語句很相似,都是完成語句的循環。

 

1-7  for循環語句


1.5.6  break語句與continue語句

如何在執行程序時,讓程序停止在我們想要停止的地方?如果要想繼續執行,又該如何解決?下面就來看一下解決這個問題的break語句和continue語句

1break語句

break語句來中止一個循環,如switch語句。當在一個whiledowhileforswitch語句中,break就會立即終止最裏層的循環或將控制權交給下面的語句執行。下面來看一個具體的實例。

<script language="JavaScript">

function BreakTest()

{

var i=1;

while(i<10)

{

document.write (i);

if(i==5)

break;

i++;

}

return("<h1>"+i+"</h1>");

}

document.write(BreakTest());

</script>

上面的例子顯示的是從1~10,而在中間使用了break之後,就中斷了正常的循環。因爲i等於5,所以在輸出到5之後就改爲執行break語句,終止當前的循環,最後輸出爲標題1i值,如圖1-8      所示。

 

1-8  break語句

2continue語句

continue語句用於重新開始一個whiledowhilefor語句。其用法如下:

continue [label];

其中[label]是可選的,它是指定斷點處語句的標籤。

執行continue語句會停止當前的循環,並從循環的開始處繼續程序流程。這樣對不同的循環類型有不同的影響:whiledowhile循環檢查它們的條件,如果條件爲true,則再次執行循環;for循環執行它們的遞增表達式,如果測試表達式爲true,則再次執行循環。下面是一個關於continue的例子。

<script language="JavaScript">

function skip()

{

var s=" ",i=0;

while(i<10)

{

i++;

document.write ("<b>"+i+"</b>");

if(i==5)

{

continue;

}

s+=i;

}

document.write ("<br>");

return("<b>"+s+"</b>");

}

document.write (skip());

</script>

從圖1-9中可以看出第二行比第一行少了一個5,這就是continuebreak的不同之處。break是在到達指定的條件之後就不再繼續執行程序,而continue則是在到達指定的條件之後繼續執行下面的程序,直到完成爲止。第一行中的10個數字是逐個輸出變量i的值,而第二行是在執行了continue之後跳過了5,再輸出字符串s的值,所以比第一行少一個字符5

 

1-9  continue語句

1.6  JavaScript的函數調用

函數是JavaScript中最基本的建構成員。函數是一個JavaScript過程,執行一個特定的任務。使用一個函數前,必須對它進行定義,然後在腳本中對它進行調用。


1.6.1  函數的定義與調用

函數的定義是由一系列的JavaScript關鍵字所組成的,主要包括函數的名稱、函數的參數、函數的JavaScript語句。參數包含在由逗號分開的圓括號內,JavaScript語句包含在大括號內,該語句還可以調用另外的一個或多個函數。

通常可以在文檔的頭部定義函數,以便當文檔被裝載時函數首先載入;否則,有可能在文檔正在被載入時,用戶已經觸發了一個事件而調用了一個還沒有定義的函數,導致一個錯誤的產生。而一個函數的原型應該像下面的語句一樣:

function square(number)

{

return number * number;

}

調用函數就是使用當前文檔中所定義的函數,或者調用另一個窗口或框架定義的函數。調用時需要用指定的參數來執行一個特殊的行爲。一個函數還可以進行遞歸,也就是說自已調用自己。

1.6.2  全局變量與局部變量

JavaScript變量可以在使用之前先進行聲明,並對其賦值。通過使用Var關鍵字對變量作聲明,而對變量作聲明的最大好處就是能及時地發現程序中的錯誤。因爲JavaScript採用的是動態編譯,而動態編譯是不易發現代碼中的錯誤的,特別是在變量命名這方面。

對於變量還有另一個重要的屬性,那就是變量的作用域。在JavaScript中同樣有全局變量局部變量之分。全局變量是定義在函數之外的所有變量,其作用範圍是整個函數。而局部變量是定義在函數體之內的,所以只對其所在的函數體有效。

1.6.3  可變參數的函數

函數的arguments是返回一個數組,它包含了傳遞給當前執行函數的每個參數。如arguments[i]functionName.arguments[i]。在這裏的i是一個序列數,從零開始,因此傳遞給函數的第一個參數應當是arguments[0]arguments的整個長度由arguments.length來指定。

通過arguments的屬性,函數可以很好地處理可變數量的參數。當不知道有多少個參數將傳遞給函數時,arguments就會發揮它的功能,可以用arguments.length決定實際傳遞給函數的參數數目,然後用arguments數組嘗試每個參數。

1.6.4  預定義函數

JavaScript中共包含以下幾個預定義函數。

 

1eval函數

eval函數對作爲數字表達式的一個字符串進行求值。其語法如下:

eval(expr)

此處的expr是一個被求值的字符串參數。如果該字符串是一個表達式,那麼eval求該表達式的值;如果該參數代表一個或多個JavaScript語句,則eval執行這些語句。eval函數可以用來把一個日期從一種格式轉換爲數值表達式或數字。

2isFinite函數

isFinite函數是計算一個參數以確定它是否是一個有限數值。其語法如下:

isFinite(number)

此處的number是一個數值。如果參數爲非數字、正無窮數或負無窮數,該函數返回false,否則返回true

3isNaN函數

isNaN函數是計算一個參數以確定它是否爲NaN(非數字)。其語法如下:

isNaN(testValue)

此處的testValue是想要計算的值。若結果爲NaN,則返回true,否則爲false

4parseIntparseFloat函數

這兩個parse函數將字符串參數轉換爲一個數值。其語法如下:

parseFloat(str)

parseInt(str[,radix])

parseFloat分析它的字符串參數str,並嘗試將其轉換爲一個浮點數,如果它處理的字符不是符號(+-)、數字、十進制小數點或指數,那麼返回值到該位置停止,而忽略後面所有的字符;如果第一個字符不能轉換爲一個數值,那它將返回NaN

parseInt分析它的第一個參數str,並基於指定的基數radix或底數之上返回一個整數。例如,若基數爲10則將其轉化爲十進制,爲8則轉化爲八進制,爲16則轉化爲十六進制。如果基數省略或它與首字符相矛盾時,JavaScript假定基數是基於字符串的第一個字符,當第一個字符不能轉換爲基於基數的數字時,它將返回NaN

5NumberString函數

NumberString函數是將一個對象轉換爲一個數字或字符串。其語法如下:

Number(objRef)

String(objRef)

此處的objRef是一個對象的引用。下面的例子將一個Date對象轉換成爲一個可讀的字符串。

D=new Date (430054663215)

<!---下面它將返回爲字符串:"Thu Aug 18 19:37:43 UTC+0800 1983"-->

x=String(D)

6escapeunescape函數

escapeunescape函數是將字符串進行編碼或解碼。其語法如下:

escape(string)

unescape(string)

escape函數將字符串轉換爲基於ISO Latin字符集的十六進制ASCII碼。這個函數不與任何其他對象關聯。但它實際上是JavaScript語言的一個固有部分,對於字母、數字以及字符將返回它們本身,而對於符號則返回它們的ASCII碼,其形式爲%xxx。例如語句document.write(escape(Hi!"))的返回結果爲Hi%21。

unescape函數是返回一個基於其ASCII碼值的字符,即對其進行解碼。

1.7  JavaScript的對象

JavaScript是基於對象的簡單程序。對象由JavaScript的變量或其他對象的屬性、方法所組成的集合。方法是作爲某個對象成員的函數,屬性是作爲對象成員的一個值、數組或對象的形式。下面就先來了解一下對象和它的屬性。

1.7.1  對象的基本概述

JavaScript中,對象是對客觀事物或事物之間關係的描述。JavaScript中可以使用以下幾種對象:

q JavaScript內置對象,如DateMathString

q 用戶自定義的對象。

q 由瀏覽器根據頁面內容自動提供的對象。

q 服務器上固有的對象。

JavaScript中的對象由屬性和方法兩個基本元素構成。屬性成員是對象的數據,方法成員是對數據的操作。在JavaScript中還提供了幾個對象處理的語句,例如thisforinwithnew

1.7.2  對象屬性

一個JavaScript對象具有各種各樣的屬性。可以用下面方法來訪問一個對象的屬性:

objectName.propertyName

需要注意的是,對象名和屬性名都對大小寫很敏感。用戶可以通過給屬性賦值來定義一個屬性。例如,假設有一個對象名爲Food,可用如下的方法來訪問其屬性:

Food.make="KFC";

Food.producing area="China";

Food.year=2005;

數組是用單一的變量名關聯數值的一個序列。在JavaScript中,屬性和數組是密切相關的。事實上,它們具有不同的界面和相同的數據結構,因此也可以像下面所給出的方法一樣來訪問Food對象的    屬性。

Food["make"]="KFC";

Food["producing area"]="China";

Food["year"]=2005;

這類數組是一個關聯數組,因爲每個索引元素都通過一個字符串值關聯。爲了舉例說明它是如何工作的,下面的函數顯示對象的屬性,並把對象和對象名作爲參數傳遞給函數。

function show_props(obj, obj_name)

{

var result=" ";

for(var i in obj)

result+=obj_name+"."+i+"="+obj[i]+"\n";

return result;

}

如果函數調用show_props(Food,"Food"),將返回下面的結果:

Food.make=KFC;

Food.producing area=China;

Food.year=2005;

1.7.3  創建對象

JavaScript 1.2開始,就可以用對象初始化程序創建對象。另外,用戶也可以首先創建一個構造函數,並用new運算符來創建該對象的實例。

1.對象初始化程序

除了用構造函數來創建對象外,還可以用對象初始化程序來創建對象。對象初始化程序技術是從C++中引用來的。它的用法如下:

objectName={property1:value1,property2:value2,...,propertyN:valueN}

這裏objectName是新對象的名字。每個property是一個標識符,可能是一個名字、數字或字符串直接量。每一個value是賦予屬性property值的表達式,objectName和賦值均爲可選項。下面的例子創建了3個屬性的對象myBenz。注意,屬性engine本身是具有它自己的兩個屬性對象。

myBenz={color:"silvery white",wheels:4,engine:{cylinders:4,size:3.0}}

2.使用構造函數

除了上面所說的用對象初始化程序來創建對象外,還可以用構造函數來創建對象。創建一個函數來指定對象的名字、屬性和方法來定義對象類。假設需要創建的對象類爲car,它具有的屬性包括makemodelyearcolor,可以按照以下方法來實現:

function car(make,model,year)

{

this.make=make;

this.model=model;

this.year=year;

}

現在就可以創建一個對象mycar,如下:

mycar=new car("Benz","S600",2000);

用戶還可以給先前定義的對象添加一個屬性,如mycar.color="silvery white",它並不會影響其他的同類對象。

3.索引對象屬性

JavaScript中,對象也是一個數組。用戶可以按名稱來引用一個對象的屬性和方法,也可以按其數組下標索引來引用。如果某文檔有兩個表單,其中第二個表單名爲myForm。下面的方法是等價的:

document.myForm;

document.forms[1];                      <!--[1]HTML源順序中屬性forms的索引-->

document.forms["myForm"];

4.爲對象類定義屬性

可以用prototype屬性在先前定義的對象類中加入一個屬性,它可以被所有指定的對象類所共享。下面的代碼爲car類所有的對象添加一個color屬性,併爲car1color屬性賦值。

car.prototype.color=null;

car1.color="black";

5.定義方法

方法是對象的集合,可以像定義標準函數一樣定義一個方法。方法就是賦給某個對象的一個函數,還可以在對象構造函數中包含方法定義來定義對象類的方法。例如,下面的例子:

function displayCar()

{

var result="A Beautiful"+this.year+" "+this.make+" "+this.model;

pretty_print(result);

}

對於前面定義car的對象類,就可以如下來調用car對象類中每個對象的displayCar方法:

car1.displayCar()

car2.displayCar()

6.使用對象引用

JavaScript有一個特殊的關鍵字this,用它可以在一個方法中來引用當前的對象。當其用於form屬性時,this關鍵字引用當前對象的父系表單。如下例,當用戶按下按鈕時,text對象內文本框內容將以其父系表單的名字myForm來代替原值Benz

<form name="myForm">

Form name:<input type="text" name="text1" value="Benz">

<input name="button1" type="button" value="Show Form Name"

onClick="this.form.text1.value=this.form.name">

</form>

7.刪除對象

若想刪除一個對象,可以用delete運算符來刪除。如下例所示:

myobj=new Number();

delete myobj;                                  <!--刪除對象並返回true-->

1.7.4  使用對象

本節就來講述一下JavaScript的對象並解釋如何來使用它們。通過本節的學習將會對對象有更加深入的瞭解。

1.關鍵對象

window對象是所有對象的“父”對象,可以在JavaScript應用程序中創建多個窗口。frame對象由框架文檔中的FRAME標記所定義,frame對象同window對象具有相同的屬性和方法,所不同的是它們的顯示方式不同。下面列舉了window對象一些很有用的方法。

q openclose:打開和關閉瀏覽器窗口,可以指定窗口的尺寸、內容以及是否有按鈕條、地址框等屬性。

q alert:顯示一個警告對話框。

q confirm:顯示一個有OKCancel按鈕的確認對話框。

q prompt:顯示一個輸入值文本域的提示對話框。

q blurfocus:在窗口中移去或得到一個焦點。

q scrollTo:捲動窗口到指定的座標。

q setInterval:在每個指定時間段對一個表達式賦值或調用一個函數。

q setTimeout:在指定的一段時間後對一個表達式賦值或調用一個函數。

在每一頁都有一個document對象。因爲它有writewriteln兩個方法產生HTML,因此它也是一個最有用的對象之一。document對象是文檔頁AnchorAppletAreaFormImageLayerLinkPlugin對象的父對象。而在文檔內的每一個表單都會產生一個Form對象,又因爲一個文檔可以包含多個表單,因此Form對象被存儲到一個叫forms的數組中,第一個表單爲forms[0],第二個爲forms[1],依此類推。如下面給出的例子就可以來引用文檔內第一個表單的第一個元素。

document.forms[0].elements[0]

location對象具有基於當前URL的屬性,例如hostname屬性是當前文檔服務器和域名。它有兩個方法:一種是reload強制窗口重載當前文檔;另一種是replace 從當前歷史記錄裝載指定的URL

history對象則包含了客戶曾經訪問過的URL列表,可以用currentnext previous屬性訪問當前、下頁、前頁的歷史記錄,還可以用history數組訪問別的歷史記錄值。也可以用go方法來重定向客戶到任何歷史記錄,例如下面的代碼裝載客戶倒數第二個歷史記錄。

history.go(-2)

navigator對象中包含了瀏覽器的版本信息,如appName屬性指定瀏覽器的名字,appVersion屬性指定瀏覽器的版本。navigator有兩個方法:一是javaEnabled,指定Java是否有效;二是preference,可以用一個簽名的腳本獲取或設置各種用戶參數。

2JavaScript映射及HTML佈局

JavaScript對象屬性值是基於HTML文檔的內容,可以稱爲映射(reflection),因爲屬性值映射到了HTML中。爲了更好地理解JavaScript映射,就需要了解瀏覽器是如何進行頁面佈局的。通常瀏覽器是從HTML文件的頂行開始往下讀入並執行其語句,並順序將其顯示到屏幕上。因爲有這個“向下”的過程,僅當讀到它時JavaScript纔對其映射。例如,只有當定義了一個表單後,JavaScript纔將表單元素視爲其對象,否則將會出錯。

同樣地,一旦頁面佈局已經發生,設置屬性並不會影響它本來的值或外觀。在document屬性章節中,我們用了一個關於文檔的標題的例子,但是卻不能更改文檔的標題,如果在JavaScript代碼中寫入以下內容:

document.title="Document屬性"

那麼就會得到一個錯誤信息。然而也有例外,也可以動態地改變表單元素的值。另外,用事件處理器也可以在佈局完成後改變少數的其他屬性,如document.bgColor

3document對象

document對象是JavaScript的基本對象之一,因此一個HTML文檔中大多數都是它的屬性。下面就來看一個關於document屬性的實例。

document.myform.Button1.value=document.title

上面這個例子是在頁面中出現一個按鈕,當用鼠標單擊之後,按鈕上的字就會變成文檔的標題。而document.title的意思就是獲取文檔的標題,並將值“Document屬性”賦予按鈕的value屬性中去。

4write方法

文檔的write方法顯示輸出信息,在腳本中可以做所有在普通HTML不能完成的工作,例如可以有條件地顯示正文或使用變量。因此write方法是最常用的JavaScript方法之一。還可以用字符串的連結運算符將幾個字符串連結爲一個。

<head>

<script language="JavaScript">

function bar()

{

document.write("<hr>");

}

function output(headLevel,headText)

{

document.write("<H", headLevel, ">", headText, "</H",headLevel, ">");

}

</script>

</head>

<body>

<script language="JavaScript">

bar();

output(1,"JavaScript產生動態HTML");

{

document.write("<hr>");

}

</script>

</body>

上面這個例題演示的是使用JavaScriptwrite方法來實現動態的HTML,並在文本的上下方各加一條水平線,如圖1-10所示。

 

1-10  write方法

1.7.5  其他內部對象

1Array對象

JavaScript可以使用預定義的Array對象及其方法提供對創建任何數據類型的數組的支持。數組是一套數值的序列,它由一個名字和索引所組成。創建數組有兩種方法來定義一個數組。具體如下:

arrayObjectName=new Array(element0,element1,…,elementN)

arrayObjectName=new Array(arrayLength)

這裏arrayObjectName既可以是存在的對象,也可以是一個新的對象。而element0,element1,,elementN是數組元素的值,arrayLength則是數組初始化的長度。

賦值及引用可以使用以下方法對數組進行賦值:

emp[0]="apple"

也可以在創建數組時給它賦值,如下:

emp=new Array(apple,orange,banana)

所有的數組元素第一個索引都是從0開始的,引用上面的第一個元素應當使用以下的格式:

emp[0]

2Boolean對象

Boolean對象是Boolean數據類型的包裝器。每當Boolean數據類型轉換爲Boolean對象時,JavaScript都隱含地使用Boolean對象。可以用下面的語法來創建一個Boolean對象:

booleanObjectName=new Boolean(value)

不要將Boolean的原始值和Boolean對象的truefalse值相混淆。可選的value參數是新對象的初始Boolean值。如果該值省略,或者爲falseundefinednullNaN以及空字符串,則該Boolean對象的初始值爲false;否則,初始值爲true。例如:

var b=new Boolean(false);

if (b)           <!--該表達式爲true-->

3Date對象

JavaScript沒有時間數據類,但可以用Date對象及其方法來取得日期和時間。Date對象有許多方法來設置、提取和操作時間,它沒有任何屬性。JavaScript處理時間的方法類似於JavaDate對象的範圍爲相對於197011日的前後100000000天。創建一個Date對象的方法如下:

dateObjectName=new Date([parameters])

dateObjectName是創建的Date對象名,它可以是一個新對象或已存在對象的屬性,parameters可以是空白或者用字符串描述。

4Function對象

預定義的Function對象指定一個JavaScript字符串碼,它可以像函數一樣進行編譯。其用法如下:

functionObjectName=new Function([arg1,arg2,...argn],functionBody)

functionObjectName是一個變量名或一個已存在的對象屬性。functionBody是包含調用該函數時被執行的JavaScript代碼塊的字符串。下面的代碼將一個函數賦予變量setBGColor,該函數設置了當前文檔的背景色。

var setbgColor=new Function("document.bgColor='antiquewhite' ")

5Math對象

預定義的Math對象具有數學常量和函數的屬性和方法。同樣地,標準的數學函數也是Math對象的方法。與別的對象不同,不能自已創建一個Math對象,所有的Math對象都是預定義的,可以通過以下方法來使用多個的數學常量和方法。

with(Math)

{

a=PI*r*r;

y=r*sin(theta);

x=r*cos(theta);

}

6Number對象

Number對象代表數值數據類型和提供數值常數的對象。Number對象最主要的用途是將其屬性集中到一個對象中,以及使數字能夠通過toString方法轉換爲字符串。

7String對象

String對象可用於處理或格式化文本字符串,以及確定和定位字符串中的子字符串。不要將它同字符串常量相混淆。用戶可以在一個字符串常量中調用任何String對象方法,JavaScript自動將字符串常量轉換爲一個臨時的String對象並調用其方法,然後丟棄該臨時的String對象。用戶也可以在一個字符串常量中使用String.length屬性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章