javascript快速入門7--ECMAScript語法基礎

水之原發表於2013-12-01

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

相關文章