變數
你會在你的應用程式中使用變數作為值的名稱。變數的名稱稱為識別子,並遵守以下規則。
JavaScript 識別子必須以字母、底線 (_)、美金符號 ($) 開頭;之後的字元就可以使用數字 (0-9)。因為 JavaScript 區分大小寫,字母包括從“A”到“Z”的字元(大寫)和從“a”到“z”的字元(小寫)。
從 JavaScript 1.5 開始,你可以在識別子中使用 ISO 8859-1 或 Unicode 字母,如 å、ü。你也可以使用表列於 Unicode 跳脫序列 頁面的 \uXXXX 的 Unicode 跳脫序列作為識別子。
合規則的名稱例子有 Number_hits
、temp99
和 _name
。
變數的宣告
你可以使用兩個方法宣告變數︰
- 使用關鍵字 var。例如,
var x = 42
。這個語法也可用於宣告 局域和全域 變數。 - 只需簡單的把值代給他。例如,
x = 42
。這只能宣告 全域變數,並引起嚴格的 JavaScript 警告。你不應該使用這個方法。
變數的求值
使用 var
語法宣告、且沒有初始值的變數,這個變數的值是 undefined。
企圖存取未宣告的變數,將導致 ReferenceError 例外的拋出︰
var a; print("The value of a is " + a); // 輸出 "a 的值是 undefined" print("The value of b is " + b); // 拋出 ReferenceError 例外
你可以使用 undefined
確認變數是否有值。在下列代碼中,變數 input
尚未代入值,所以 if
語法求出的是 true
。
var input; if(input === undefined){ doThis(); } else { doThat(); }
在用於布林邏輯時,undefined
值會被視為 false
。例如,下面的代碼會執行函數 myFunction
,因為 myArray
元素尚未定義︰
var myArray = new Array(); if (!myArray[0]) myFunction();
當你對 null 變數求值時,null 值在用於數值時會被視為 0,而在用於布林邏輯時則視為 false。例如︰
var n = null; print(n * 32); // 輸出 0
變數的作用域
當你在任何函數之外宣告變數時,這個變數就稱為全域變數,因為這個變數可以在整份文件中的任何代碼裡使用。當你在函數之內宣告變數時,這個變數就稱為局域變數,因為這個變數只能在函數之內使用。
JavaScript 的 區塊語法 並沒有作用域;在區塊之內的代碼不會是局域的。例如在下面的代碼中,如果 condition
是 false
,結果會輸出 0
,而不是拋出例外︰
if (condition) { var x = 5; } print(x ? x : 0);
另一個在 JavaScript 中關於變數的獨特行為是,你可以參考稍後才會宣告的變數,而不會引起例外︰
print(x === undefined); // 輸出 "true" var x = 3;
全域變數
全域變數其實就是全域物件的屬性。在 Web 頁面中,全域物件是 window,所以你可以使用 window.variable
語法設定並存取全域變數。
因此,你可以從另一個視窗或框架,藉由指定視窗或框架的名稱,來存取宣告在視窗或框架裡的全域變數。例如,如果有一個稱為 phoneNumber
的變數是在 FRAMESET
文件中宣告,你可以從名為 parent.phoneNumber
的子框架參考這個變數。