motion said:
Lasse Reichstein Nielsen wrote:
I got it now,
I thought that when you give indexes to an array they would remain unvaried.
probably this is true only with string indexes.
Read the ECMAScript Language reference (section 15.4) - array indexes
*are* strings:
"Array objects give special treatment to a certain class of
property names. A property name P (in the form of a string
value) is an array index if and only if ToString(ToUint32(P))
is equal to P and ToUint32(P) is not equal to 2^32-1."
I think you are getting confused between Object objects and Array
objects. The only way to find the index of a particular value in an
array is to search for it, e.g.:
var anArray = ['apple', 'banana', 'pear'];
What is the index of 'banana'?
for (var i=0; i<anArray.length; i++){
if ('banana' == anArray
) {
alert('banana is at index ' + i);
}
}
Now if you do:
anArray.shift();
What is the index of 'banana' now? Arrays don't have to be contiguous:
anArray[100] = 'orange';
The length of anArray is now 101, even though it only has 4 elements
(or items or members, whatever). Such arrays are often called
'sparse'. You can iterate over just the indexes with a value using
for..in, but be aware that will find *all* enumerable properties of the
Array, not just the ones with numeric indexes.
Secondly, remember that Array's are just objects with a few extra
methods and a special length property. You can add properties to
ordinary objects and give them 'indexes', and you can add properties to
an array that don't have numeric indexes:
anArray.name = 'fred';
Now a for..in loop through anArray will stumble across 'fred' as well
as the four fruits, but looping over the indexes won't.
Also think about:
var anObject = { 0 : 'apple', 1 : 'banana', 2 : 'pear'};
How would you find the 'index' of banana now? Probably using a for..in
loop:
for (idx in anObject){
if ('banana' == anObject[idx]){
alert('Property name for banana is ' + idx);
}
}
I hope that helps.