A ordem da iteração difere no IE9

No IE9, as chaves numéricas das propriedades do objeto são classificadas e isso resulta em uma ordem diferente de iteração no IE9, em comparação com o IE8, onde a ordem é preservada à medida que é inserid

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

for(var key in obj) alert(key) 

Resultad

// 1,2,3,4 no IE9

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

Existe uma maneira de desativar a classificação automática pelo IE9. Caso contrário, é possível, de alguma forma, fazer o navegador entender que as chaves devem ser identificadas como cadeias de caracteres em vez de número (mas sem anexar espaço, _ ou qualquer outro caractere especial)

Por favor sugira!

Aqui está o trecho de código de exemplo em que estou enfrentando esse problem

    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;
}

As opções selecionadas geradas por esse script foram classificadas de acordo com o ID no IE9, onde eu preciso da mesma ordem em que ele está inserid

questionAnswers(2)

yourAnswerToTheQuestion