When using strings as keys of an array, console is showing that the array without these declared values and while iterating by this values where keys are string aren't displayed? , although i can get value of them.
>> var arr = [ 0, 1, 2, 3 ]; undefined
>> arr["something"] = "aught"; "aught"
>> arr [0, 1, 2, 3]
>> arr["something"] "aught"
>> for( var i = arr.length; i--; console.log( arr[ i ] ) ); 3 2 1 0I understand that arrays are objects which has implemented some kind of 'enumerate' interface in JavaScript's engine.
Most interesting is that interpreter isn't throwing either warning or error, so I spent some time of searching for where data could be lost.
02 Answers
In javascript there are 2 type of arrays: standard arrays and associative arrays
[ ]- standard array - 0 based integer indexes only{ }- associative array - javascript objects where keys can be any strings
So when you define:
var arr = [ 0, 1, 2, 3 ];you are defining a standard array where indexes can only be integers. When you do arr["something"] since something (which is what you use as index) is not an integer you are basically defining a property to the arr object (everything is object in javascript). But you are not adding an element to the standard array.
for( var i = arr.length; i--; console.log( arr[ i ] ) );
This will only give you the numeric indices, of course, but you can still loop over both numeric indices and string keys of your array like this:
for (var x in arr) { console.log(x + ": " + arr[x]);
}
/* (console output): 0: 0 1: 1 2: 2 3: 3 something: aught
*/ 1