Array Indexing
Arrays in JScript are sparse. That is, if you have an array
with three elements that are numbered 0, 1, and 2, you can create element 50
without worrying about elements 3 through 49. If the array has an automatic
length variable (see Intrinsic Objects for an
explanation of automatic monitoring of array length), the length variable is set
to 51, rather than to 4. You can certainly create arrays in which there are no
gaps in the numbering of elements, but you aren't required to. In fact, in
JScript, your arrays don't have to have numbered subscripts at all.
In JScript, objects and arrays are essentially identical to each other. The
real difference is not in the data, but rather in the way you address the
members of an array or the properties and
methods of an object.
Addressing Arrays
There are two main ways to address the members of an array.
Ordinarily, you address arrays by using brackets. The brackets enclose either a
numeric value or an expression that
evaluates to a nonnegative integer. The following example assumes that the
entryNum variable is defined and assigned a value elsewhere in the
script.
theListing = addressBook[entryNum];
theFirstLine = theListing[1];
This method of addressing is equivalent to the method
for addressing objects, though in object addressing, what follows the period
must be the name of an actual property. If there is no such property, your code
generates an error.
The second way to address an array is to make an object/array that contains
properties that are numbered, and then generate the numbers in a loop. The
following example generates two arrays, one for the name and one for the
address, from a listing in addressBook. Each of these contains four
properties. An instance of theName, for example, built from the [Name1]
through [Name4] properties of theListing, might contain "G." "Edward"
"Heatherington" "IV", or "George" "" "Sand" "".
theListing = addressBook[entryNum];
for (i = 1; i < 4; i++) {
theName[i] = theListing["Name" + i];
theAddress[i] = theListing["Address" + i];
}
While this particular instance is short, and could
easily have been written in the "dot" style of notation,that is, addressing
theListing, theName, and theAddress as objects rather than
as arrays, that is not always possible. Sometimes the particular property may
not exist until run time, or there may be no way to know which one it will be in
advance. For example, if the addressBook array were arranged by last name
instead of by numbered listings, the user would probably be entering names "on
the fly," while the script is running, to look people up. The following example
assumes the existence of appropriate function definitions elsewhere in the
script.
theListing = addressBook[getName()];
theIndivListing = theListing[getFirstName()];
This is associative addressing of the array,
that is, addressing by means of fully arbitrary strings.