JavaScript 腳本語言作為一門功能強(qiáng)大、使用范圍較廣的程序語言,其語言基礎(chǔ)包括數(shù)據(jù)類型、變量、運(yùn)算符、函數(shù)以及核心語句等內(nèi)容。本篇文章主要介紹JavaScript 腳本語言的基礎(chǔ)知識(shí)
一:基礎(chǔ)常識(shí)
1.腳本執(zhí)行順序:JavaScript 腳本解釋器將按照程序代碼出現(xiàn)的順序來解釋程序語句,因此可以將函數(shù)定義和變量聲明放在<head>和</head>之間,此時(shí)與函數(shù)體相關(guān)的操作不會(huì)被立即執(zhí)行。
2.大小寫敏感:JavaScript 腳本程序?qū)Υ笮懨舾校嗤淖帜福笮懖煌淼囊饬x也不同
空白字符
3.空__________白字符包括空格、制表符和換行符等,在編寫腳本代碼時(shí)占據(jù)一定的空間,但腳本被瀏覽器解釋執(zhí)行時(shí)無任何作用。腳本程序員經(jīng)常使用空格作為空白字符,JavaScript 腳本解釋器是忽略任何多余空格的
注:在字符串中,空格不被忽略,而作為字符串的一部分顯示出來,在編寫 JavaScript 腳本代碼時(shí),經(jīng)常需添加適當(dāng)?shù)目?#26684;使腳本代碼層次明晰,方便相關(guān)人員查看和維護(hù)。
4.分號:在編寫腳本語句時(shí),用分號作為當(dāng)前語句的結(jié)束符
5.塊:在定義函數(shù)時(shí),使用大括號“{}”將函數(shù)體封裝起來
二:數(shù)據(jù)類型
首先要說明的是在javascript中沒有特定的數(shù)據(jù)類型修飾符,基本數(shù)據(jù)類不管是什么類型,在定義的時(shí)候都是用var
1.整型和浮點(diǎn)數(shù)值:JavaScript 允許使用整數(shù)類型和浮點(diǎn)類型兩種數(shù)值,其中整數(shù)類型包含正整數(shù)、0 和負(fù)整數(shù);而浮點(diǎn)數(shù)則可以是包含小數(shù)點(diǎn)的實(shí)數(shù),也可以是用科學(xué)計(jì)數(shù)法表示的實(shí)數(shù)
2 八進(jìn)制和十六進(jìn)制:在整數(shù)類型的數(shù)值中,數(shù)制可使用十進(jìn)制、八進(jìn)制以及十六進(jìn)制
三.變量
1.變量標(biāo)識(shí)符:與C++、Java 等高級程序語言使用多個(gè)變量標(biāo)識(shí)符不同,JavaScript 腳本語言使用關(guān)鍵字var 作為其唯一的變量標(biāo)識(shí)符,其用法為在關(guān)鍵字var 后面加上變量名。
2.變量作用域:要討論變量的作用域,首先要清楚全局變量和局部變量的聯(lián)系和區(qū)別:
??? 全局變量:可以在腳本中的任何位置被調(diào)用,全局變量的作用域是當(dāng)前文檔中整個(gè)腳本區(qū)域。
??? 局部變量:只能在此變量聲明語句所屬的函數(shù)內(nèi)部使用,局部變量的作用域僅為該函數(shù)體。
聲明變量時(shí),要根據(jù)編程的目的決定將變量聲明為全局變量還是局部變量。一般而言,保存全局信息(如表格的原始大小、下拉框包含選項(xiàng)對應(yīng)的字符串?dāng)?shù)組等)的變量需聲明為全局變量,而保存臨時(shí)信息(如待輸出的格式字符串、數(shù)學(xué)運(yùn)算中間變量等)的變量則聲明
為局部變量。
3.弱類型:JavaScript 腳本語言像其他程序語言一樣,其變量都有數(shù)據(jù)類型,具體數(shù)據(jù)類型將在下一節(jié)中介紹。高級程序語言如C++、Java 等為強(qiáng)類型語言,與此不同的是,JavaScript 腳本語言是弱類型語言,在變量聲明時(shí)不需顯式地指定其數(shù)據(jù)類型,變量的數(shù)據(jù)類型將根據(jù)變量的具體內(nèi)容推導(dǎo)出來,且根據(jù)變量內(nèi)容的改變而自動(dòng)更改,而強(qiáng)類型語在變量聲明時(shí)必須顯式地指定其數(shù)據(jù)類型。變量聲明時(shí)不需顯式指定其數(shù)據(jù)類型既是 JavaScript 腳本語言的優(yōu)點(diǎn)也是缺點(diǎn),優(yōu)點(diǎn)是編寫腳本代碼時(shí)不需要指明數(shù)據(jù)類型,使變量聲明過程簡單明了;缺點(diǎn)就是有可能造成因微妙的拼寫不當(dāng)而引起致命的錯(cuò)誤。
4.基本數(shù)據(jù)類型:在實(shí)現(xiàn)預(yù)定功能的程序代碼中,一般需定義變量來存儲(chǔ)數(shù)據(jù)(作為初始值、中間值、最終值或函數(shù)參數(shù)等)。變量包含多種類型,JavaScript 腳本語言支持的基本數(shù)據(jù)類型包括
Number 型、String 型、Boolean 型、Undefined 型、Null 型和Function 型,下面簡單介紹一下幾種數(shù)據(jù)類型:
4.1 Number 型:Number 型數(shù)據(jù)即為數(shù)值型數(shù)據(jù),包括整數(shù)型和浮點(diǎn)型,整數(shù)型數(shù)制可以使用十進(jìn)制、八進(jìn)制以及十六進(jìn)制標(biāo)識(shí),而浮點(diǎn)型為包含小數(shù)點(diǎn)的實(shí)數(shù),且可用科學(xué)計(jì)數(shù)法來表示。一般來說,Number 型數(shù)據(jù)為不在括號內(nèi)的數(shù)字
4.2 Undefined 型:Undefined 型即為未定義類型,用于不存在或者沒有被賦初始值的變量或?qū)ο蟮膶傩裕缦铝姓Z句定義變量name 為Undefined 型:
var name;定義Undefined 型變量后,可在后續(xù)的腳本代碼中對其進(jìn)行賦值操作,從而自動(dòng)獲得由其值決定的數(shù)據(jù)類型。
4.2 Null 型:Null 型數(shù)據(jù)表示空值,作用是表明數(shù)據(jù)空缺的值,一般在設(shè)定已存在的變量(或?qū)ο蟮膶傩裕榭諘r(shí)較為常用。區(qū)分Undefined 型和Null 型數(shù)據(jù)比較麻煩,一般將Undefined 型和Null 型等同對待。
4.3 Function 型:Function 型表示函數(shù),可以通過new 操作符和構(gòu)造函數(shù)Function()來動(dòng)態(tài)創(chuàng)建所需功能的函數(shù),并為其添加函數(shù)體。例如:
var myFuntion = new Function()
{staments;};
JavaScript 腳本語言除了支持上述六種基本數(shù)據(jù)類型外,也支持組合類型,如數(shù)組Array和對象Object 等,下面介紹組合類型。
四:組合類型
1.Array 型:Array 型即為數(shù)組,數(shù)組是包含基本和組合數(shù)據(jù)的序列。在JavaScript 腳本語言中,每一種數(shù)據(jù)類型對應(yīng)一種對象,數(shù)組本質(zhì)上即為Array 對象。考察如下定義:
var score = [56,34,23,76,45];
上述語句創(chuàng)建數(shù)組score,中括號“[]”內(nèi)的成員為數(shù)組元素。由于JavaScript 是弱類型語言,因此不要求目標(biāo)數(shù)組中各元素的數(shù)據(jù)類型均相同,例如:var score = [56,34,”23”,76,”45”];
由于數(shù)組本質(zhì)上為Array 對象,則可用運(yùn)算符new 來創(chuàng)建新的數(shù)組,例如:var score=new Array(56,34,”23”,76,”45”);
訪問數(shù)組中特定元素可通過該元素的索引位置index 來實(shí)現(xiàn),如下列語句聲明變量m 返回?cái)?shù)組score 中第四個(gè)元素:
var m = score [3];
數(shù)組作為Array 對象,具有最重要的屬性length,用來保存該數(shù)組的長度
2 Object 型:對象為可包含基本和組合數(shù)據(jù)的組合類型,且對象的成員作為對象的屬性,對象的成員函數(shù)作為對象的方法。在JavaScript 腳本語言中,可通過在對象后面加句點(diǎn)“.”并加上對象
屬性(或方法)的名稱來訪問對象的屬性(或方法),例如:
document.bgColor
document.write(“Welcome to JavaScript World!”);
五:運(yùn)算符
1 賦值運(yùn)算符:JavaScript 腳本語言的賦值運(yùn)算符包含“=”、“+=”、“-=”、“*=”、“/=”、“%=”、“&=”、“^=”等
運(yùn)算符 舉例 簡要說明
= m=n 將運(yùn)算符右邊變量的值賦給左邊變量
+= m+=n 將運(yùn)算符兩側(cè)變量的值相加并將結(jié)果賦給左邊變量
-= m-=n 將運(yùn)算符兩側(cè)變量的值相減并將結(jié)果賦給左邊變量
*= m*=n 將運(yùn)算符兩側(cè)變量的值相乘并將結(jié)果賦給左邊變量
/= m/=n 將運(yùn)算符兩側(cè)變量的值相除并將整除的結(jié)果賦給左邊變量
%= m%=n 將運(yùn)算符兩側(cè)變量的值相除并將余數(shù)賦給左邊變量
&= m&=n 將運(yùn)算符兩側(cè)變量的值進(jìn)行按位與操作并將結(jié)果賦值給左邊變量
^= m^=n 將運(yùn)算符兩側(cè)變量的值進(jìn)行按位或操作并將結(jié)果賦值給左邊變量
<<= m<<=n 將運(yùn)算符左邊變量的值左移由右邊變量的值指定的位數(shù),并將操作的結(jié)果賦予左邊變量
>>= m>>=n 將運(yùn)算符左邊變量的值右移由右邊變量的值指定的位數(shù),并將操作的結(jié)果賦予左邊變量
>>>= m>>>=n 將運(yùn)算符左邊變量的值邏輯右移由右邊變量的值指定的位數(shù),并將操作的結(jié)果賦給左邊變量
賦值運(yùn)算符是編寫 JavaScript 腳本代碼時(shí)最為常用的操作,讀者應(yīng)熟練掌握各個(gè)運(yùn)算符的功能,避免混淆其具體作用。
2 基本數(shù)學(xué)運(yùn)算符:JavaScript 腳本語言中基本的數(shù)學(xué)運(yùn)算包括加、減、乘、除以及取余等,其對應(yīng)的數(shù)學(xué)
運(yùn)算符分別為“+”、“-”、“*”、“/”和“%”
3.位運(yùn)算符:JavaScript 腳本語言支持的基本位運(yùn)算符包括:“&”、“|”、“^”和“~”等。腳本代碼執(zhí)行位運(yùn)算時(shí)先將操作數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),操作完成后將返回值轉(zhuǎn)換為十進(jìn)制
位運(yùn)算符 舉例 簡要說明
& 9&4 按位與,若兩數(shù)據(jù)對應(yīng)位都是1,則該位為1,否則為0
^ 9^4 按位異或,若兩數(shù)據(jù)對應(yīng)位相反,則該位為1,否則為0
| 9|4 按位或,若兩數(shù)據(jù)對應(yīng)位都是0,則該位為0,否則為1
~ ~4 按位非,若數(shù)據(jù)對應(yīng)位為0,則該位為1,否則為0
位運(yùn)算符在進(jìn)行數(shù)據(jù)處理、邏輯判斷等方面使用較為廣泛,恰當(dāng)應(yīng)用位運(yùn)算符,可節(jié)省大量腳本代碼。
3.自加和自減:自加運(yùn)算符為“++”和自減運(yùn)算符為“--”分別將操作數(shù)加1 或減1。值得注意的是,
自加和自減運(yùn)算符放置在操作數(shù)的前面和后面含義不同。運(yùn)算符寫在變量名前面,則返回值
為自加或自減前的值;而寫在后面,則返回值為自加或自減后的值。
4.比較運(yùn)算符:JavaScript 腳本語言中用于比較兩個(gè)數(shù)據(jù)的運(yùn)算符稱為比較運(yùn)算符,包括“= =”、“!=”、“>”、“<”、“<=”、“>=”等
5.邏輯運(yùn)算符:JavaScript 腳本語言的邏輯運(yùn)算符包括“&&”、“||”和“!”等,用于兩個(gè)邏輯型數(shù)據(jù)之間的操作,返回值的數(shù)據(jù)類型為布爾型
6.逗號運(yùn)算符:編寫JavaScript 腳本代碼時(shí),可使用逗號“,”將多個(gè)語句連在一起,瀏覽器載入該代碼時(shí),將其作為一個(gè)完整的語句來調(diào)用,但語句的返回值是最右邊的語句。逗號“,”一般用于在函數(shù)定義和調(diào)用時(shí)分隔多個(gè)參數(shù),
7.對象運(yùn)算符:JavaScript 腳本語言主要支持四種對象運(yùn)算符,包括點(diǎn)號運(yùn)算符、new 運(yùn)算符、delete運(yùn)算符以及()運(yùn)算符等。對象包含屬性和方法,點(diǎn)號運(yùn)算符用來訪問對象的屬性和方法。其用法是將對象名稱與對象的屬性(或方法)用點(diǎn)號隔開,例如:
var myColor=document.bgColor;
window.alert(msg);
當(dāng)然,也可使用雙引號“[]”來訪問對象的屬性,改寫上述
語句:var myColor=document[" bgColor "];
new 運(yùn)算符用來創(chuàng)建新的對象,例如創(chuàng)建一個(gè)新的數(shù)組對象,可以寫成:var exam = new Array (43,76,34 89,90);
new 運(yùn)算符可以創(chuàng)建程序員自定義的對象,以可以創(chuàng)建JavaScript 內(nèi)建對象的實(shí)例。
8.typeof 運(yùn)算符:typeof 運(yùn)算符用于表明操作數(shù)的數(shù)據(jù)類型,返回?cái)?shù)值類型為一個(gè)字符串。在JavaScript腳本語言中,其使用格式如下:
var myString=typeof(data);
六:javascript的循環(huán)控制結(jié)構(gòu):由于在javascript中if、if……else、while、do……while等語句與java中基本相識(shí),所以在此就不在贅述
七:函數(shù)
JavaScript 腳本語言允許開發(fā)者通過編寫函數(shù)的方式組合一些可重復(fù)使用的腳本代碼塊,增加了腳本代碼的結(jié)構(gòu)化和模塊化。函數(shù)是通過參數(shù)接口進(jìn)行數(shù)據(jù)傳遞,以實(shí)現(xiàn)特定的功能。
1 函數(shù)的基本組成
函數(shù)由函數(shù)定義和函數(shù)調(diào)用兩部分組成,應(yīng)首先定義函數(shù),然后再進(jìn)行調(diào)用,以養(yǎng)成良好的編程習(xí)慣。函數(shù)的定義應(yīng)使用關(guān)鍵字 function
,其語法規(guī)則如下:
function funcName ([parameters])
{statements;
[return 表達(dá)式;]}
除了自定義函數(shù)外,JavaScript 腳本語言提供大量的內(nèi)建函數(shù),無需開發(fā)者定義即可直接調(diào)用,例如window 對象的alert()方法即為JavaScript 腳本語言支持的內(nèi)建函數(shù)。函數(shù)定義過程結(jié)束后,可在文檔中任意位置調(diào)用該函數(shù)。引用目標(biāo)函數(shù)時(shí),只需在函數(shù)名后加上小括號即可。若目標(biāo)函數(shù)需引入?yún)?shù),則需在小括號內(nèi)添加傳遞參數(shù)。如果函數(shù)有返回值,可將最終結(jié)果賦值給一個(gè)自定義的變量并用關(guān)鍵字return 返回。
2 全局函數(shù)與局部函數(shù):JavaScript 腳本語言提供了很多全局(內(nèi)建)函數(shù),在腳本編程過程中可直接調(diào)用,在此介紹四種簡單的全局函數(shù):parseInt()、parseFloat()、escape()和unescape()。
parseInt()函數(shù)的作用是將字符串轉(zhuǎn)換為整數(shù),parseFloat()函數(shù)的作用是將字符串轉(zhuǎn)換為浮點(diǎn)數(shù);escape()函數(shù)的作用是將一些特殊字符轉(zhuǎn)換成ASCII 碼,而unescape()函數(shù)的作用是將ASCII 碼轉(zhuǎn)換成字符。
3.作為對象的函數(shù):JavaScript 腳本語言中所有的數(shù)據(jù)類型、數(shù)組等均可作為對象對待,函數(shù)也不例外。可以使用new 操作符和Function 對象的構(gòu)造函數(shù)Function()來生成指定規(guī)則的函數(shù),其基本語
法如下:
var funcName = new Function (arguments,statements;);
值得注意的是,上述的構(gòu)造函數(shù)Function()首字母必須為大寫,同時(shí)函數(shù)的參數(shù)列表與操作代碼之間使用逗號隔開。
注意:在定義函數(shù)對象時(shí),參數(shù)列表可以為空,也可有一個(gè)或多個(gè)參數(shù),使用變量引用該函數(shù)時(shí),應(yīng)將函數(shù)執(zhí)行所需要的參數(shù)傳遞給函數(shù)體。作為對象的函數(shù)最重要的性質(zhì)即為它可以創(chuàng)建靜態(tài)變量,給函數(shù)增加實(shí)例屬性,使得函數(shù)在被調(diào)用之間也能發(fā)揮作用。作為對象的函數(shù)使用靜態(tài)變量后,可以用來保存其運(yùn)行的環(huán)境參數(shù)如中間值等數(shù)據(jù)。
4.函數(shù)應(yīng)用注意事項(xiàng)
最后介紹一下在使用函數(shù)過程中應(yīng)特別予以注意的幾個(gè)問題,以幫助讀者更好、更準(zhǔn)確確地使用函數(shù),并養(yǎng)成良好的編程習(xí)慣。具體表現(xiàn)在如下幾點(diǎn):
定義函數(shù)的位置:如果函數(shù)代碼較為復(fù)雜,函數(shù)之間相互調(diào)用較多,應(yīng)將所有函數(shù)的定義部分放在HTML 文檔的<head>和</head>標(biāo)記對之間,既可保證所有的函數(shù)在調(diào)用之前均已定義,又可使開發(fā)者后期的維護(hù)工作更為簡便;
??? 函數(shù)的命名:函數(shù)的命名原則與變量的命名原則相同,但盡量不要將函數(shù)和變量取同一個(gè)名字。如因?qū)嶋H情況需要將函數(shù)和變量定義相近的名字,也應(yīng)給函數(shù)加上可以清楚辨認(rèn)的字符(如前綴func 等)以示區(qū)別;
??? 函數(shù)返回值:在函數(shù)定義代碼結(jié)束時(shí),應(yīng)使用return 語句返回,即使函數(shù)不需要返回任何值;
??? 變量的作用域:區(qū)分函數(shù)中使用的變量是全局變量還是局部變量,避免調(diào)用過程中出現(xiàn)難以檢查的錯(cuò)誤;
??? 函數(shù)注釋:在編寫腳本代碼時(shí),應(yīng)在適當(dāng)?shù)牡胤浇o代碼的特定行添加注釋語句,例如將函數(shù)的參數(shù)數(shù)量、數(shù)據(jù)類型、返回值、功能等注釋清楚,既方便開發(fā)者對程序的后期維護(hù),也方便其他人閱讀和使用該函數(shù),便于模塊化編程;
??? 函數(shù)參數(shù)傳遞:由于 JavaScript 是弱類型語言,使用變量時(shí)并不檢查其數(shù)據(jù)類型,導(dǎo)致一個(gè)潛在的威脅,即開發(fā)者調(diào)用函數(shù)時(shí),傳遞給函數(shù)的參數(shù)數(shù)量或數(shù)據(jù)類型不滿足要求而導(dǎo)致錯(cuò)誤的出現(xiàn)。在函數(shù)調(diào)用時(shí),應(yīng)仔細(xì)檢查傳遞給目標(biāo)函數(shù)的參數(shù)變量的數(shù)量和數(shù)據(jù)類型。
其中第五點(diǎn)尤為值得特別關(guān)注,因由其導(dǎo)致的錯(cuò)誤非常難于檢測。