Jscript 对象是属性和方法的集合。一个方法就是一个函数,是对象的成员。属性是一个值或一组值(以数组或对象的形式),是对象的成员。
Jscript 支持四种类型的对象:内部对象、生成的对象、宿主给出的对象(如 Internet 浏览器中的 window 和 document)以及 ActiveX 对象(外部组件)。
作为数组的对象
在 Jscript 中,对象和数组几乎是以相同的方式处理的。对象和数组均可以被赋予任意值,实际上数组只是一种特殊的对象。数组和对象的区别在于数组有一个“奇妙的” length 属性,而对象没有。这意味着可以给数组的一个元素赋予比其他元素更大的值。例如,myArray[100] = "hello",然后 length 属性将自动地被更新为 101(新长度)。同样,如果修改数组的 length 属性,将删除不再是数组部分的元素。
Jscript 中所有的对象均支持“expando”属性或那些可以在运行时动态添加和删除的属性。这些属性可以有包含数字的任意名称。如果属性的名称是简单的标识符<<参考标识符规则>>,可以在对象名称的后面加句点,例如:
var myObj = new Object();
// 添加两个 expando 属性,name 和 age
myObj.name = "Fred";
myObj.age = 42;
如果属性名称不是一个简单的标识符,或者在写脚本的时候不知道,可以在方括号中使用任意表达式来索引属性。在 Jscript 中所有 expando 属性的名称在被添加到对象之前被转换为字符串。
var myObj = new Object();
// 添加两个无法写在 object.property 语
// 法中的 expando 属性。
// 第一个属性包含无效字符(空格),
// 所以必须写在方括号里。
myObj["not a valid identifier"] = "This is the property value";
// 第二个 expando 名称是一个数字,
// 所以也必须写在方括号里。
myObj[100] = "100";
传统的作法是赋给数组元素以 0 开始的数字索引。这些数组元素与 length 属性相交互。然而,由于所有的数组也是对象,也支持 expando 属性。请注意,虽然如此,expando 属性并不以任何方式与 length 属性相交互。例如:
// 三个元素的数组
var myArray = new Array(3);
// 添加数据
myArray[0] = "Hello";
myArray[1] = 42;
myArray[2] = new Date(2000, 1, 1);
// 显示数组的长度 3
window.alert(myArray.length);
// 添加某些 expando 属性
myArray.expando = "JScript!";
myArray["another Expando"] = "Windows";
// 仍然显示 3,因为两个 expando 属性
// 并不影响长度。
window.alert(myArray.length);
虽然 Jscript 并不直接支持多维数组,但是可以在数组元素中存储任意种类的数据(包含其他数组)。所以通过在另一个数组的元素里存储其他数组可以得到多维数组的特性。例如,下面的代码为最大为 5 的数字建立了乘法表:
// 若是更大的表请改变本数
var iMaxNum = 5;
// 循环计数
var i, j;
// 新数组。由于数组从 0 开始计数,
// 而不是 1,所以数组大小为 iMaxNum + 1。
var MultiplicationTable = new Array(iMaxNum + 1);
// 为每个主要的数做循环(表中的每一行)
for (i = 1; i <= iMaxNum; i++)
{
// 生成表中的列
MultiplicationTable = new Array(iMaxNum + 1);
// 将乘法的结果存在行中
for (j = 1; j <= iMaxNum; j++)
{
MultiplicationTable[j] = i * j;
}
}
window.alert(MultiplicationTable[3][4]); // 显示 12
window.alert(MultiplicationTable[5][2]); // 显示 10
window.alert(MultiplicationTable[1][4]); // 显示 4