Consider this example Javascript code:
a = new Array();
a['a1']='foo';
a['a2']='bar';
b = new Array(2);
b['b1']='foo';
b['b2']='bar';
c=['c1','c2','c3'];
console.log(a);
console.log(b);
console.log(c);
Results in the Firebug console are as follows:
For a (the '[]' had to be expanded by clicking on the '+' button):
[]
a1 "foo"
a2 "bar"
For b:
[undefined, undefined]
For c:
["c1", "c2", "c3"]
My questions are:
NOTE: Google Chrome's Firebug displays only [] for array 'a', without the option to expand it.
EDIT: Alright, it seems that arrays in Javascript have only numerical keys, so adding a string as a key name makes an object out of an array. But why doesn't jQuery's .each work with it?
$.each(a, function ()
{
alert ('derp');
})
This code, appended to the script, produces no alerts.
This question is related to
javascript
arrays
syntax
Arrays in JS have two types of properties:
Regular elements and associative properties (which are nothing but objects)
When you define a = new Array()
, you are defining an empty array. Note that there are no associative objects yet
When you define b = new Array(2)
, you are defining an array with two undefined locations.
In both your examples of 'a' and 'b', you are adding associative properties i.e. objects to these arrays.
console.log (a)
or console.log(b)
prints the array elements i.e. []
and [undefined, undefined]
respectively. But since a1/a2
and b1/b2
are associative objects inside their arrays, they can be logged only by console.log(a.a1, a.a2)
kind of syntax
Source: Stackoverflow.com