Как я понял, мы говорим не о чтении текстового файла swf, а о работе интерпретатора...
Рассмотрим приведенный код:

Код:
(1)
a[1]="xxx";
trace(a["1"]);
и наоборот
(2)
a["1"]="xxx";
trace(a[1]);
Поясняю:
Код 1:
В данном случае Используется индексная адресация(!).
Байткод:
setVariable
push 'a'
getVariable
push 1, 'xxx'
Выполнение команды trace производится с конвертацией строкового типа в индекс массива(на уровне интерпретатора).
Код 2:
Компилятор байткода записывает единицу как строку "1".
Байткод:
setVariable
push 'a'
getVariable
push '1', 'xxx'
Интерпретатор, получая такую строку скорее всего конвертирует ее в индекс (по крайней мере я бы именно так писал интерпретатор).
Далее рассуждаем...
Если мы пишем:

Код:
a = new Object();
a["a"] = "xxx";
Байткод:
constants 'a', 'Object', 'xxx'
push 'a', 0.0, 'Object'
new
setVariable
push 'a'
getVariable
push 'a', 'xxx'
setMember
А если мы запишем так:

Код:
a = new Array();
a["a"] = "xxx";
Байткод:
constants 'a', 'Array', 'xxx'
push 'a', 0.0, 'Array'
new
setVariable
push 'a'
getVariable
push 'a', 'xxx'
setMember
По моему ясно, что в обоих случаях мы получаем объект с именем "a" и свойством "a", хотя во втором случае мы имеем доступ еще и к свойствам массива, так как(естественно) Array - есть экземпляр от Object, и любой потомок Array наследует его свойства и методы (такие как length и т.п)...
Все... По моему достаточно рассуждений.
С уважением...
