Я не получил ваш результат, когда идентификаторы свойств объекта были алфавитными. IE8, FF5, Chrome 12 и Opera 9.8 сохранили порядок создания, т. Е.
. Key: AA Value: 23 Key: BB Value: 12
Это было когда идентификаторы были номерами что результаты соответствуют вашим: -
IE8, FF5 -> Key: 23 Значение: AA Key: 12 Значение: BB
Opera, Chrome -> Key: 12 Value: BB-код: 23 Значение: AA
Opera и Chrome хранятся в обратном порядке создания, потому что 12 меньше 23, поэтому, если вы используете вместо этого, скажите: -
var obj = {2:"AA",12:"BB"};
, затем вы получите этот результат для всех 4 браузеров: -
Ключ: 2 Значение: Ключ AA: 12 Значение: BB
Таким образом, это использование чисел в качестве идентификаторов, которые вызывают несоответствие. Если идентификаторы являются алфавитными, то оба заказа на создание и сохраненные свойства одинаковы для 4-х браузеров. Это несмотря на правила ECMA, что сохраненный порядок не должен быть связан с порядком создания.
Если строковые идентификаторы являются числовыми, например. «23» и «12», то Opera и Chrome рассматривают их как числа и снова меняют порядок создания, поэтому тип также не разрешен. Типы «23a» в порядке, как и «a23».
Чтобы ответить на ваш вопрос, используйте нечисловые идентификаторы строк, и поведение будет одинаковым для всех четырех браузеров (и, возможно, для всех браузеров).