El orden de iteración difiere en IE9

En IE9, las claves numéricas de las propiedades del objeto se ordenan y eso da como resultado un orden de iteración diferente en IE9 en comparación con IE8, donde el orden se conserva a medida que se inserta.

var obj = {
  "5": "John",
  "1": "Kumar",
  "3": "Rajesh",
  "2": "Yogesh"
}

for(var key in obj) alert(key) 

Resultad

// 1,2,3,4 en IE9

// 5,1,3,2 en IE8, IE7

De todos modos, puedo desactivar esta clasificación automática por IE9. Si no es así, es posible de alguna manera hacer que el navegador entienda que las claves deben identificarse como cadenas en lugar de números (pero sin agregar ningún espacio, _ u otros caracteres especiales)

¡¡Por favor recomiende!

Aquí está el fragmento de código de muestra donde estoy enfrentando este problema.

    function Person(id, name) {
    this.id = id;
    this.name = name;
}

var persons = new Object();

var p1 = Person("5","John")
persons[5]=p1
var p2 = Person("1","Kumar")
persons[1]=p2  
var p3 = Person("3","Rajesh")
persons[3]=p3
var p4 = Person("4","Yogesh")
persons[4]=p4


for(var id in personId){
   var p = persons[id];
   var option = new Option(p.name, p.id);
   select.options[select.options.length] = option;
}

Las opciones de selección generadas por este script se ordenaron según la ID en IE9 donde necesito el mismo orden en que se inserta.

Respuestas a la pregunta(2)

Su respuesta a la pregunta