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);		//結果為 true
var x = 7;			//宣告變數 x

全域變數(Global Variables)

全域變數實際上是全域物件(Global Object)的屬性。也就是說,當瀏覽器的直譯器啟動時,在執行任何的 Script 程式之前,會先行建立一個全域物件,而對於這個物件的屬性,我們可以稱之為程式的全域變數。再換句話說,當您建立一個全域變數時,也就是替該物件建立了一個屬性(property)。

在客戶端 JS 上,整個視窗中的網頁,其全域物件就是 window,所以您可以使用 window.variable 語法來設置與存取全域變數。

原始值與參考值(primitive value and reference value)

在 JS 中,變數可儲存之值的類型有兩種:

  1. 使用原始型態(primitive type)的原始值(數值、字串、布林值、null 與 undefined)。
  2. 使用參考型態(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