字面表達
你在 JavaScript 使用字面表達來表示值。這是由你在 Script 中直接寫下的固定值,這些不是變數。本節說明下列各類型的字面表達︰
陣列的字面表達
陣列的字面表達是以零個以上的表達式所構成的列表,列表的每一項代表陣列的元素,以方括號 ([]) 包夾。當你使用陣列的字面表達建立陣列時,陣列會以指定的值作為元素來初始化,也會以指定的參數個數來設定陣列的長度。
以下範例以三個元素和長度建立 coffees
陣列︰
var coffees = ["French Roast", "Colombian", "Kona"];
附註: 陣列的字面表達是物件初始化子的一種類型。參閱 物件初始化子的使用。
如果在頂層 Script 裡使用字面表達建立陣列,每一次對含有陣列的字面表達的表達式求值時,JavaScript 就會解譯這些陣列。此外,每一次呼叫函數時,在函數中使用的字面表達就會被建立。
陣列的字面表達也是 Array 物件。參閱 Array 物件 取得有關 Array 物件的細節。
陣列的字面表達的額外的逗號
你不必在陣列的字面表達中指定所有的元素。如果你放上兩個連續的逗號,就會為未指定的元素預留空間來建立陣列。以下範例建立 fish
陣列︰
var fish = ["Lion", , "Angel"];
這個陣列含有兩個附有值的元素和一個空的元素(fish[0]
是“Lion”,fish[1]
是 undefined
,fish[2]
是“Angel”)。
如果你在元表列表的尾部附帶逗號,這個逗號會被忽略。在下面的範例中,陣列的長度是 3,這裡不存在 myList[3]
。所在位於列表裡面的逗號指的都是新的元素。
var myList = ['home', , 'school', ];
在下面的範例中,陣列的長度是 4,myList[0]
和 myList[2]
是空的。
var myList = [ , 'home', , 'school'];
在下面的範例中,陣列的長度是 4,myList[1]
和 myList[3]
是空的。只有最後面的逗號被忽略。
var myList = ['home', , 'school', , ];
布林的字面表達
布林類型有兩種字面表達︰true
和 false
。
別被原始布林值的 true
、false
和 Boolean 物件的 true、false 的值混淆了。Boolean 物件是以原始布林資料類型包裝起來的。參閱 Boolean 物件 取得更多資訊。
整數
整數可以表示為十進制、十六進制、八進制。十進制整數的字面表達由一系列不以 0 開頭的數字組成。以 0 開頭的整數的字面表達表示他是八進制,以 0x(或 0X)開頭表示十六進制。十六進制整數可以包含數字 (0-9) 和 a-f 和 A-F 的字母。八進制整數只可以包含 0-7 的數字。
八進制整數的字面表達在 ECMA-262 第三版的標準中已不被推薦。JavaScript 1.5 為了向後相容,仍然繼續支援。
整數的字面表達的一些範例︰
0、117、-345(十進制) 015、0001、-077(八進制) 0x1123、0x00111、-0xF1A7(十六進制)
浮點數的字面表達
浮點數的字面表達可分為以下部分︰
- 可帶正負號的十進制整數(在前面加上“+”或“-”),
- 小數點(“.”),
- 小數部分(十進制數),
- 指數部分。
指數部分是以一個“e”或“E”後接數字所組成,可帶正負符號(在前面加上“+”或“-”)。浮點數的字面表達至少必須要有一個數字和一個小數點或“e”(或“E”)。
浮點數的字面表達的一些範例有 3.1415、-3.1E12、.1e12、2E-12。
表示成更精簡的語法結構是︰
[digits][.digits][(E|e)[(+|-)]digits]
例如︰
3.14 2345.789 .3333333333333333333
物件的字面表達
物件的字面表達是以零個以上的 屬性名稱-關聯值 的配對所構成,以花括號 ({}) 包夾。你不應該在語句的開始處使用物件的字面表達。這會導致錯誤,或出現非預期的行為,因為 { 會被解譯成區塊的開始處。
以下是物件的字面表達的範例。car
物件的第一個元素定義了 myCar
屬性;第二個元素,getCar
屬性,含有函數 (CarTypes("Honda"));
;第三個元素,special
屬性,使用了現存的變數(Sales
)。
var Sales = "Toyota"; function CarTypes(name) { if (name == "Honda") return name; else return "Sorry, we don't sell " + name + "."; } var car = { myCar: "Saturn", getCar: CarTypes("Honda"), special: Sales }; document.write(car.myCar); // Saturn document.write(car.getCar); // Honda document.write(car.special); // Toyota
此外,你可以使用數值或字串的字面表達作為屬性的名稱,或者嵌入其他的物件。以下是上述的範例。
var car = { manyCars: {a: "Saab", b: "Jeep"}, 7: "Mazda" }; document.write(car.manyCars.b); // Jeep document.write(car[7]); // Mazda
請注意︰
var foo = {a: "alpha", 2: "two"}; document.write(foo.a); // alpha document.write(foo[2]); // two //document.write(foo.2); // 錯誤: 參數列表後面少了 ) //document.write(foo[a]); // 錯誤: a 尚未定義 document.write(foo["a"]); // alpha document.write(foo["2"]); // two
字串的字面表達
字串的字面表達是以零個以上的字元所構成,並以雙引號 (") 或單引號 (') 包夾。字串必須以相同的引號包夾,也就是成對的單、雙引號。以下是字串的字面表達的範例︰
- "blah"
- 'blah'
- "1234"
- "one line \n another line"
- "John's cat"
你可以在字串的字面表達的值上呼叫 String 物件的所有方法—JavaScript 會自動的把字串的字面表達轉換成臨時的 String 物件,呼叫方法,然後丟棄臨時的 String 物件。你也可以使用 String.length
屬性︰
- "John's cat".length
除非你特別使用 String 物件,否則就應該使用字串的字面表達。參閱 String 物件 取得有關 String 物件的細節。
在字串中使用特殊字元
除了普通的字元以外,你也可以在字串中包含特殊字元,如下範例︰
"one line \n another line"
下表列出了你可以使用於 JavaScript 字串中的特殊字元。
字元 | 意義 |
---|---|
\b | 後退一格 |
\f | 換頁 |
\n | 換行 |
\r | 歸位 |
\t | Tab |
\v | 垂直 Tab |
\' | 單引號 |
\" | 雙引號 |
\\ | 反斜線 (\)。 |
\XXX | 使用介於 0 至 377 之間的三個八進制數 XXX 來表示以 Latin-1 編碼的字元。例如,\251 是版權符號的八進制內碼序列。 |
\xXX | 使用介於 00 至 FF 之間的兩個十六進制數 XX 來表示以 Latin-1 編碼的字元。例如,\xA9 是版權符號的十六進制內碼序列。 |
\uXXXX | 使用四個十六進制數 XXXX 來表示 Unicode 字元。例如,\u00A9 是版權符號的 Unicode 內碼序列。參閱 Unicode 的跳脫序列。 |
表 2.1: JavaScript 的特殊字元
字元的跳脫
對於未列在表 2.1 的字元,加在前面的反斜線將會被忽略,但是這個作法已被建議廢除,應該要避免。
你可以在字串裡面的引號前面插入反斜線。這就是引號的跳脫。例如︰
var quote = "He read \"The Cremation of Sam McGee\" by R.W. Service."; document.write(quote);
結果會是︰
He read "The Cremation of Sam McGee" by R.W. Service.
要在字串裡包含反斜線,你必須跳脫反斜線字元。例如,要把檔案路徑 c:\temp
代入成字串,方法如下︰
var home = "c:\\temp";