You're not doing anything wrong that's just not the way to make the structure you want. Using something = {}
is shorthand for something = new Object()
. There is no such shorthand to create a Dictionary
.
From the docs you linked:
An associative array is an instance of the Object class, which means
that each key corresponds to a property name.
and
ActionScript 3.0 introduces an advanced type of associative array
called a dictionary. Dictionaries, which are instances of the
Dictionary class in the flash.utils package, use keys that can be of
any data type but are usually instances of the Object class. In other
words, dictionary keys are not limited to values of type String.
To get your expected result you'd have to do the following:
var defaultMarkingA:Dictionary = new Dictionary();
defaultMarkingA["type"] = "page";
defaultMarkingA["displayText"] = "XYZ";
defaultMarkingA["innerMarkings"] = new Array();
var dict:Dictionary = new Dictionary();
dict["id"] = "ABC";
dict["type"] = "page";
dict["displayText"] = "ABC";
defaultMarkingA["innerMarkings"].push(dict);
There is nothing wrong with using an Object
as an associative array. The only problem I could see is that performance may differ between using Object
and Dictionary
but you'd need to do some profiling to see if a) there is any difference and b) if that difference matters.