I was trying to stringify an array-like object that was declared as an array object and found that JSON.stringify wasn’t processing correctly array-like object when it is defined as an array object.
See below for more clarity, –> jsFiddle
var simpleArray = []; //note that it is defined as Array Object
alert(typeof simpleArray); // returns object -> Array Object
simpleArray ['test1'] = 'test 1';
simpleArray ['test2'] = 'test 2';
alert(JSON.stringify(simpleArray)); //returns []
It worked fine and returned me {"test1":"test 1","test2":"test 2"} when I changed
var simpleArray = []; to var simpleArray = {};.
Can someone shed some light or some reference where I can read more?
Edit:
Question: When typeof simpleArray = [] and simpleArray = {} returned object, why JSON.stringify wasn’t able to return {"test1":"test 1","test2":"test 2"} in both cases?
You don’t want an array. When you want an “associative array” in JavaScript, you really want an object,
{}.You can distinguish them with
instanceof Array:EDIT: it can process it. It serializes all of the elements of the array. However, to be an element, there must be a numeric key. In this case, there are none.
This is nothing unique to JSON. It’s consistent with
toSourceand thelengthproperty.