javascript arrays and type conversion inconsistencies
Posted
by ForYourOwnGood
on Stack Overflow
See other posts from Stack Overflow
or by ForYourOwnGood
Published on 2009-01-17T18:19:26Z
Indexed on
2010/03/08
2:12 UTC
Read the original article
Hit count: 612
I have been playing with javascript arrays and I have run into, what I feel, are some inconsistencies, I hope someone can explain them for me.
Lets start with this:
var myArray = [1, 2, 3, 4, 5];
document.write("Length: " + myArray.length + "<br />");
for( var i in myArray){
document.write( "myArray[" + i + "] = " + myArray[i] + "<br />");
}
document.write(myArray.join(", ") + "<br /><br />");
Length: 5 myArray[0] = 1 myArray[1] = 2 myArray[2] = 3 myArray[3] = 4 myArray[4] = 5 1, 2, 3, 4, 5
There is nothing special about this code, but I understand that a javascript array is an object, so properities may be add to the array, the way these properities are added to an array seems inconsistent to me.
Before continuing, let me note how string values are to be converted to number values in javascript.
Nonempty string -> Numeric value of string or NaN
Empty string -> 0
So since a javascript array is an object the following is legal:
myArray["someThing"] = "someThing";
myArray[""] = "Empty String";
myArray["4"] = "four";
for( var i in myArray){
document.write( "myArray[" + i + "] = " + myArray[i] + "<br />");
}
document.write(myArray.join(", ") + "<br /><br />");
Length: 5 myArray[0] = 1 myArray[1] = 2 myArray[2] = 3 myArray[3] = 4 myArray[4] = four myArray[someThing] = someThing myArray[] = Empty String 1, 2, 3, 4, four
The output is unexpected.
The non empty string "4" is converted into its numeric value when setting the property myArray["4"], this seems right. However the empty string "" is not converted into its numeric value, 0, it is treated as an empty string. Also the non empty string "something" is not converted to its numeric value, NaN, it is treated as a string. So which is it? is the statement inside myArray[] in numeric or string context?
Also, why are the two, non numeric, properities of myArray not included in myArray.length and myArray.join(", ")?
© Stack Overflow or respective owner