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:
- Am I using the array[‘key’]=’value’ syntax correctly?
- Why isn’t array b working as expected?
- Why are arrays a and c displayed differently in the console? It also seems that jQuery is unable to iterate through the array a with it’s .each() method.
- Could you reccomend any good tutorials on Javascript array behaviour?
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.
Arrays have numerical indexes. So,
are not adding elements to the array, but adding
.a1and.a2properties to theaobject (arrays are objects too). As further evidence, if you did this:Your third option:
is assigning the variable
can array with three elements. Those three elements can be accessed as:c[0],c[1]andc[2]. In other words,c[0] === 'c1'andc.length === 3.Javascript does not use its array functionality for what other languages call associative arrays where you can use any type of key in the array. You can implement most of the functionality of an associative array by just using an object in javascript where each item is just a property like this.
It is generally a mistake to use an array for this purpose as it just confuses people reading your code and leads to false assumptions about how the code works.