7.3 變數 (Variables)

  JavaScript 與 C 語言一樣,具有輸入/輸出 (I/O)、運算、條件判斷、迴圈、函式等功能,其語法也與 C 語言有許多共通之處,例如:用分號「;」表示一個陳述式 (Statement) 的結束,用「//」、「/* ... */」表示註解。惟 JavaScript 在變數的使用上與 C 語言有很大的不同,JavaScript 在宣告一個變數時不需指定該變數的資料型別,只需使用 var 關鍵字宣告即可,程式執行時會自動依據變數內的值來設定其資料型別。事實上,就算一個變數沒有預先宣告,也可以直接使用,例如:
// 宣告一個名為 "str" 的變數
var str;
// 宣告的同時亦指定其值為 "Hello, world!",該變數將自動被設為字串資料型別
var str = "Hello, world!";
// 就算未經宣告仍可以直接使用
str = "Hello, world!";
  「不需預先宣告變數」看似很方便,然而這並不是一個好的作法。因為在 JavaScript 裡有無使用 var 關鍵字宣告變數是有以下區別的:若是在區塊內,使用 var 會建立一個僅存在於該區塊的區域變數 (local variable)。若未使用 var,則意思為賦值 (assignment)。程式會由該區塊開始,往上層區塊尋找已建立過的該變數,並賦予新值。若一直到了最上層 (global scope) 都還找不到該變數,則會自動建立一個新的全域變數 (global variable)。
  另外,由於 JavaScript 在執行任何程式碼之前,會先處理所有的變數宣告,因此會產生「hoisting」的現象,也就是:
foo = 7;
var foo;
// 其實就等同於
var foo;
foo = 7;
// 不過還是建議您將所有的變數宣告都寫在最前面
  JavaScript 變數的命名規則為:一、不得使用保留字。二、變數名稱的開頭需為英文字元或「_」符號。三、變數名稱的其他部份可為英文字元、數字或「_」符號。四、區分大小寫。另外,JavaScript 的資料型別分為:整數、浮點數、字串、布林值、物件、陣列、Null、Undefined。雖然 JavaScript 不強調變數的資料型別,但當我們將多個不同型別的變數混合運算時,由於會進行隱型別轉換 (Implicit Type Conversion),變數的資料型別還是會影響到運算的結果,需格外留意。
  JavaScript 基本的運算子 (operator) 大致與 C 語言相同,在此不再多做敘述。