JScript Object 物件
更新:2007 年 11 月
JScript 中所有物件的基礎包括了 Object 物件支援 expando 屬性 (Property),或是可以在程式執行時加入及移除的屬性。
使用 Object 物件
這些屬性可以有任何名稱,包括數字。如果屬性名稱是簡單識別項,屬性名稱可以寫在物件名稱後的句號之後,例如:
var myObj = new Object();
// Add two expando properties, 'name' and 'age'
myObj.name = "Fred";
myObj.age = 53;
您也可以利用索引運算子 [] 來存取物件的屬性。如果屬性名稱不是簡單識別項,或是您撰寫指令碼時不知道屬性名稱,就會需要這個運算子。方括弧內的任意運算式 (包含簡單識別項),可以索引這個屬性。在將 JScript 的所有 expando 屬性名稱加入物件之前,會先將屬性名稱轉換為字串。
使用索引運算子時,會將這個物件視為「關聯陣列」。關聯陣列是一種資料結構,它可以動態的讓任意資料值與任意字串相關聯。這個範例加入的 expando 屬性,沒有簡單識別項。
var myObj = new Object();
// This identifier contains spaces.
myObj["not a simple identifier"] = "This is the property value";
// This identifier is a number.
myObj[100] = "100";
雖然索引運算子與存取陣列元素比較有關,但是索引與物件搭配使用時,它永遠都是表示為字串常值 (String Literal) 的屬性名稱。
Array 物件有一個特殊 length 屬性,它會隨著新元素的加入而變更;即使以索引運算子來加入屬性,物件通常沒有長度屬性。
請注意存取物件屬性的兩種方式之間的重要差異。
運算子 |
屬性名稱被視為 |
代表屬性名稱 |
---|---|---|
句號 (.) |
識別項 |
「無法」當做資料來管理 |
索引 ([]) |
字串常值 |
「可以」當做資料來管理 |
如果您要到執行階段才會知道屬性名稱 (例如,根據使用者輸入來建構物件時),這項差異就變得很有用。若要從關聯陣列中擷取所有屬性,必須使用 for ... in 迴圈 (Loop)。