ECMAScript的基礎概念
熟悉Java、C和Perl這些語言的開發者會發現ECMAScript的語法很容易掌握,因為它借用了這些語言的語法。Java和ECMAScript有一些關鍵語法特性相同,也有一些完全不同。ECMAScript的基礎概念如下:
- 區分大小寫。與Java一樣,變量、函數名、運算符以及其他一切東西都是區分大小寫的,也就是說,變量test不同於變量Test。
- 變量是弱類型的。與Java和C不同,ECMAScript中的變量無特定的類型,定義變量時只用var運算符,可以將它初始化為任意的值。這樣可以隨時改變變量所存數據的類型(盡管應該避免這樣做,但作為Web開發,這確實可以提高效率)。
- 每行結尾的分號可有可無。Java、C和Perl都要求每行代碼以分號(;)結束才符合語法。ECMAScript則允許開發者自行決定是否以分號結束一行代碼。如果沒有分號,ECMAScript就把這行代碼的結尾看作該語句的結尾(與Visual Basic和VBScript相似),前提是這樣沒有破壞代碼的語義。最好的代碼編寫習慣是總加入分號,因為沒有分號,有些瀏覽器就不能正確運行!
- 注釋與Java、C和PHP語言的注釋相同。ECMAScript借用了這些語言的注釋語法。有兩種類型的注釋——單行注釋和多行注釋。單行注釋以雙斜線(//)開頭。多行注釋以單斜線和星號(/*)開頭,以星號加單斜線結尾(*/)。
- 括號表明代碼塊。從Java中借鑒的另一個概念是代碼塊。代碼塊表示一系列應該按順序執行的語句,這些語句被封裝在左括號({)和右括號(})之間。
一些示例如下:
var txt = "some string"; TXT = "other string";//TXT無須聲明,可以直接賦值 alert(txt==TXT);//false var str = "string" //分號可有可無 var hob = "No";var bob = "Yes";//使用分號,可以在一行上寫多行語句 /* 多行注釋 alert("注釋中的代碼不會被執行") */ if (txt=="some string") {//代碼塊 alert(true); }
變量
如前所述,ECMAScript中的變量是用var運算符(variable的縮寫)加變量名定義的,例如:
var test = "Hello!World!";
在這個例子中,聲明了變量test,並把它的值初始化為"Hello!World!"(字符串)。由於ECMAScript是弱類型的,所以解釋程序會為test自動創建一個字符串值,無需明確的類型聲明。還可以用一個var語句定義兩個或多個變量:
var a = "some",b="string"
前面的代碼定義了變量test,初始值為"some",還定義了變量test2,初始值為"string"。不過用同一個var語句定義的變量不必具有相同的類型,如下所示:
var a=12,b="string";
即使a和b屬於兩種不同的數據類型,在ECMAScript中這樣定義也是完全合法的。與Java不同,ECMAScript中的變量並不一定要初始化(它們是在幕后初始化的,將在后面討論這一點)。因此,下面一行代碼也是有效的:
var a; //只聲明
此外,與Java不同的還有變量可以存放不同類型的值。這是弱類型變量的優勢。例如,可以把變量初始化為字符串類型的值,之后把它設置為數字值,如下所示:
var test = "string"; alert(test); //.....若干代碼后 test=123;//更改了類型 alert(test);
這段代碼將毫無問題地輸出字符串值和數字值。但是,如前所述,使用變量時,好的編碼習慣是始終存放相同類型的值。變量名需要遵守兩條簡單的規則:
- 第一個字符必須是字母、下划線(_)或美圓符號($)
- 余下的字符可以是下划線、美圓符號或任何字母或數字字符。
下面的變量名都是合法的:
var a; var $a; var $; var _a; var _; var a23;
當然,只是因為變量名的語法正確並不意味着就該使用它們。變量還應遵守一條著名的命名規則:
- Camel標記法——首字母是小寫的,接下來的單詞都以大寫字母開頭
- Pascal標記法——首字母是大寫的,接下來的單詞都以大寫字母開頭
- 匈牙利類型標記法——在以Pascal標記法命名的變量前附加一個小寫字母(或小寫字母序列),說明該變量的類型。例如,i表示整數,s表示字符串
下面的表列出了用匈牙利類型標記法定義ECMAScript變量使用的前綴:
類型 | 前綴 | 示例 |
---|---|---|
數組 | a | aValues |
布爾型 | b | bFound |
浮點型(數字) | f | fValue |
函數 | fn | fnMethod |
整型(數字) | i | iValue |
對象 | o | oType |
正則表達式 | re | rePattern |
字符串 | s | sValue |
變型(可以是任何類型) | v | vValue |
下面是一些命名示例
var userName="CJ";//駝峰命名方式 var UserName="CJ";//Pascal命名方式 var sUserName="CJ";//匈牙利命名方式
ECMAScript另一個有趣的方面(也是與大多數程序設計語言的主要區別)是在使用變量之前不必聲明。例如:
var str ="some"; otherStr += str+" "+"string"; alert(otherStr);
在上面的代碼中,變量otherStr並沒有用var運算符定義,這里只是插入了它,就像已經聲明過它。ECMAScript的解釋程序遇到未聲明過的標識符時,用該變量名創建一個全局變量,並將其初始化為指定的值。這是該語言的便利之處,不過如果不能緊密跟蹤變量,這樣做也很危險。最好的習慣是像使用其他程序設計語言一樣,總是聲明所有變量。
關鍵字
ECMA-262定義了ECMAScript支持的一套關鍵字(keyword)。這些關鍵字標識了ECMAScript語句的開頭和/或結尾。根據規定,關鍵字是保留的,不能用作變量名或函數名。下面是ECMAScript關鍵字的完整列表:
break | else | new | var |
case | finally | return | void |
catch | for | switch | while |
continue | function | this | with |
default | if | throw | |
delete | in | try | |
do | instanceof | typeof |
如果把關鍵字用作變量名或函數名,可能得到諸如“Identifier expected”(應該有標識符,缺少標識符)這樣的錯誤消息。
保留字
保留字是對於JavaScript有特殊含義的單詞。因此,不能將它們用作變量名或函數名。也就是說,它們可能是JavaScript未來版本中的命令。現在就應該避免使用它們,以免在新版本發布時不得不修改代碼。如果將保留字用作變量名或函數名,那么除非將來的瀏覽器實現了該保留字,否則很可能收不到任何錯誤消息。當瀏覽器將其實現后,該單詞將被看作關鍵字,如此將出現關鍵字錯誤。
ECMAScript 3為以后保留的單詞:
abstract | final | protected |
boolean | float | public |
byte | goto | short |
char | implements | static |
class | import | super |
const | int | synchronized |
debugger | interface | throws |
double | long | transient |
enum | native | volatile |
export | package | extends |
private |
ECMAScript 4:ECMAScript4現在還沒有什么實現.ECMAScript4中,下面的不再是保留字了,但也應該盡量不要使用它們
boolean final short byte float static char int double long
下面的被加入了保留字
as namespace use false true null is