Jscript 對(duì)象是屬性和方法的集合。一個(gè)方法就是一個(gè)函數(shù),是對(duì)象的成員。屬性是一個(gè)值或一組值(以數(shù)組或?qū)ο蟮男问剑,是?duì)象的成員。Jscript 支持四種類(lèi)型的對(duì)象:內(nèi)部對(duì)象、生成的對(duì)象、宿主給出的對(duì)象(如 Internet 瀏覽器中的 window 和 document)以及 ActiveX 對(duì)象(外部組件)。
在 Jscript 中,對(duì)象和數(shù)組幾乎是以相同的方式處理的。對(duì)象和數(shù)組均可以被賦予任意值,實(shí)際上數(shù)組只是一種特殊的對(duì)象。數(shù)組和對(duì)象的區(qū)別在于數(shù)組有一個(gè)“奇妙的” length 屬性,而對(duì)象沒(méi)有。這意味著可以給數(shù)組的一個(gè)元素賦予比其他元素更大的值。例如,myArray[100] = "hello",然后 length 屬性將自動(dòng)地被更新為 101(新長(zhǎng)度)。同樣,如果修改數(shù)組的 length 屬性,將刪除不再是數(shù)組部分的元素。
Jscript 中所有的對(duì)象均支持“expando”屬性或那些可以在運(yùn)行時(shí)動(dòng)態(tài)添加和刪除的屬性。這些屬性可以有包含數(shù)字的任意名稱(chēng)。如果屬性的名稱(chēng)是簡(jiǎn)單的標(biāo)識(shí)符<<參考標(biāo)識(shí)符規(guī)則>>,可以在對(duì)象名稱(chēng)的后面加句點(diǎn),例如:
var myObj = new Object(); // 添加兩個(gè) expando 屬性,'name' 和 'age' myObj.name = "Fred"; myObj.age = 42;
如果屬性名稱(chēng)不是一個(gè)簡(jiǎn)單的標(biāo)識(shí)符,或者在寫(xiě)腳本的時(shí)候不知道,可以在方括號(hào)中使用任意表達(dá)式來(lái)索引屬性。在 Jscript 中所有 expando 屬性的名稱(chēng)在被添加到對(duì)象之前被轉(zhuǎn)換為字符串。
var myObj = new Object(); // 添加兩個(gè)無(wú)法寫(xiě)在 object.property 語(yǔ) // 法中的 expando 屬性。 // 第一個(gè)屬性包含無(wú)效字符(空格), // 所以必須寫(xiě)在方括號(hào)里。 myObj["not a valid identifier"] = "This is the property value"; // 第二個(gè) expando 名稱(chēng)是一個(gè)數(shù)字, // 所以也必須寫(xiě)在方括號(hào)里。 myObj[100] = "100";
傳統(tǒng)的作法是賦給數(shù)組元素以 0 開(kāi)始的數(shù)字索引。這些數(shù)組元素與 length 屬性相交互。然而,由于所有的數(shù)組也是對(duì)象,也支持 expando 屬性。請(qǐng)注意,雖然如此,expando 屬性并不以任何方式與 length 屬性相交互。例如:
// 三個(gè)元素的數(shù)組 var myArray = new Array(3); // 添加數(shù)據(jù) myArray[0] = "Hello"; myArray[1] = 42; myArray[2] = new Date(2000, 1, 1); // 顯示數(shù)組的長(zhǎng)度 3 window.alert(myArray.length); // 添加某些 expando 屬性 myArray.expando = "JScript!"; myArray["another Expando"] = "Windows"; // 仍然顯示 3,因?yàn)閮蓚(gè) expando 屬性 // 并不影響長(zhǎng)度。 window.alert(myArray.length);
雖然 Jscript 并不直接支持多維數(shù)組,但是可以在數(shù)組元素中存儲(chǔ)任意種類(lèi)的數(shù)據(jù)(包含其他數(shù)組)。所以通過(guò)在另一個(gè)數(shù)組的元素里存儲(chǔ)其他數(shù)組可以得到多維數(shù)組的特性。例如,下面的代碼為最大為 5 的數(shù)字建立了乘法表:
// 若是更大的表請(qǐng)改變本數(shù) var iMaxNum = 5; // 循環(huán)計(jì)數(shù) var i, j; // 新數(shù)組。由于數(shù)組從 0 開(kāi)始計(jì)數(shù), // 而不是 1,所以數(shù)組大小為 iMaxNum + 1。 var MultiplicationTable = new Array(iMaxNum + 1); // 為每個(gè)主要的數(shù)做循環(huán)(表中的每一行) for (i = 1; i <= iMaxNum; i++) { // 生成表中的列 MultiplicationTable[i] = new Array(iMaxNum + 1); // 將乘法的結(jié)果存在行中 for (j = 1; j <= iMaxNum; j++) { MultiplicationTable[i][j] = i * j; } } window.alert(MultiplicationTable[3][4]); // 顯示 12 window.alert(MultiplicationTable[5][2]); // 顯示 10 window.alert(MultiplicationTable[1][4]); // 顯示 4