JavaScript1.5 變數(Variables)
變數(Variables)
什麼是變數?在 JS 中,我們可以把變數想像成一個儲存的容器,而這個容器則是用來存放一些數值或者算式,以利於物件或函式的取用與處理相關的資料。
底下的簡單說明應該可以讓您對變數有了更進一步的概念:var myNum = 7;//將數值 7 指派給 myNum 這個變數,這時 myNum 中儲存著7。var mySum = myNum + 77;//將 myNum 中所儲存的值再加上 77 後指派給 mySum 來儲存。
在您的應用中,您可使用一些變數來作為您數值的符號。而變數的名稱,須依照某些規則給它一個可以識別的名稱。變數名稱第一個字須為英文字母、底線或錢型符號,之後可以接的字元為字母、底線或數字,變數名稱須注意大小寫,大小寫不同則視為不同的變數,而且亦不能使用中文或者是保留字來命名。變數可分為全域變數與區域變數,全域變數可以在程式中任何地方參考或者引用,而區域變數只能在函式中參考與引用,並且須以 var 做宣告。
- 宣告變數(Declaring Variables)
- 轉換變數(Evaluating Variables)
- 變數範圍(Variable Scope)
- 全域變數(Global Variables)
- 原始值與參考值(primitive value and reference value)
- 保留字(Reserved words)
宣告變數(Declaring Variables)
宣告變數的同時也可以給它一個值,像這樣就叫變數的初始化。如果沒有給它一個值的話,就代表該變數已經定義,其值為 undefined。
您可以有兩種方式來宣告變數:
- 直接給它一個值,例如 x = 6,這種方式是宣告全域變數的方式。
- 以關鍵字 var 來宣告,例如 var x = 6,這種方式是宣告區域變數的方式。
var myNum//宣告變數var myNum, myStr//用一個 var 同時宣告兩個變數(如有多個變數請用逗號隔開)
在 JS 中,變數可以不用先行宣告,等到有需要時才來同時宣告與指定數值。myNum = 6789//宣告為數值變數myStr = "sky"//宣告為字串變數
在 JS 中的 = 號並不是等於的意思,而是將 = 號右邊的值指派給左邊。var sVar = "您好"//宣告 sVar 為一個字串變數,初始值為您好。var nVar = 6789//宣告 nVar 為一個數值變數,初始值為6789(整數)。var fVar = 6.78//宣告 fVar 為一個數值變數,初始值為6.78(浮點數)。var bVar = true//宣告 bVar 為一個布林變數,初始值為true。var uVar//宣告 uVar 為一個變數,但資料型態未定義。
轉換變數(Evaluating Variables)
一個變數或者陣列元素如果沒被賦予一個數值,這時會有一個未定義(undefined) 的數值。一個轉換未指派變數的結果完全依賴於如何來宣告:
- 假如一個未指派值的變數沒有使用 var 來宣告,則會導致一個執行錯誤(runtime error)。
- 假如一個未指派值的變數使用 var 來宣告,則會產生一個未定義(undefined)數值或是 NaN 在前後數值關聯中。(NaN:Not a Number——使用不正確的資料,像字串或未定義的數值執行數學運算時,就會使用這個數值。)
function f1() {
return y - 6;
} f1() //導致執行錯誤
function f2() {
return var y - 6;
} f2() //回傳 NaN
您可以使用未定義(undefined)來正確引導變數有一個數值。以下程式碼顯示,變數 input 並未被指派一個數值,並且 if 敘述句的結果將轉換為 true。
var input;
if(input === undefined) { //=== 意義為相等且同類型
doThis();
} else {
doThat();
}
變數範圍(Variable Scope)
當我們宣告一個在函式之外的任何變數,這個變數就稱之為全域變數(Global Variable) ,因為對於在目前文件中的任何其它的程式碼而言,該變數它都是有用的。當您在一個函式中宣告變數,這個變數就稱之為區域變數(Local Variable),因為它只有在該函式中才有作用。
變數在 JS 中另一個不尋常的是在您參考引用一個變數之後,又可另外來宣告它:
print(x === undefined);//結果為 truevar x = 7;//宣告變數 x
全域變數(Global Variables)
全域變數實際上是全域物件(Global Object)的屬性。也就是說,當瀏覽器的直譯器啟動時,在執行任何的 Script 程式之前,會先行建立一個全域物件,而對於這個物件的屬性,我們可以稱之為程式的全域變數。再換句話說,當您建立一個全域變數時,也就是替該物件建立了一個屬性(property)。
在客戶端 JS 上,整個視窗中的網頁,其全域物件就是 window,所以您可以使用 window.variable 語法來設置與存取全域變數。
原始值與參考值(primitive value and reference value)
在 JS 中,變數可儲存之值的類型有兩種:
- 使用原始型態(primitive type)的原始值(數值、字串、布林值、null 與 undefined)。
- 使用參考型態(reference type)的參考值(函式、物件與陣列)。
- 原始值(primitive value)——儲存在疊(stack)中的數據資料。其值直接儲存在變數之位置。原始值所佔據的空間是固定的。
- 參考值(reference value)——儲存在堆(heap)中的物件資料。其值只是一個指標(pointer),指向物件於記憶體所在之處。參考值所佔據的空間不是固定的。
保留字(Reserved words)
下面所列出的保留字無法被使用來作為 JS 的變數、函式、迴圈標籤、方法或物件的識別名稱(identifier)。這些保留字是被使用在 JS 作為關鍵字使用。
| JS 保留字 | ||||
| break | case | catch | continue | default |
| delete | do | else | false | finally |
| for | function | if | in | instanceof |
| new | null | return | switch | this |
| throw | true | try | typeof | var |
| void | while | with | ||
| ECMA 擴充的保留字 | ||||
| abstract | boolean | byte | char | class |
| const | debugger | double | enum | export |
| extends | final | float | goto | implements |
| import | int | interface | long | native |
| package | private | protected | public | short |
| static | super | synchronized | throws | transient |
| volatile | ||||
| 其它需避免的保留字 | ||||
| arguments | Array | Boolean | Date | decodeURI |
| decodeURIComponent | encodeURI | Error | escape | eval |
| EvalError | Function | Infinity | isFinite | Math |
| NaN | Number | Object | parseFloat | parseInt |
| RangeError | ReferenceError | RegExp | String | SyntaxError |
| TypeError | undefined | unescape | URIError | |




