gpt4 book ai didi

javascript - 迭代顺序在 IE9 中不同

转载 作者:行者123 更新时间:2023-12-04 00:53:17 25 4
gpt4 key购买 nike

在 IE9 中,对象属性的数字键被排序,这导致 IE9 中的迭代顺序与 IE8 不同,后者在插入时保留顺序。

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

for(var key in obj) alert(key)

结果

//IE9中的1,2,3,4

//IE8、IE7中的5,1,3,2

无论如何我可以通过 IE9 禁用此自动排序。如果不是,那么是否有可能以某种方式让浏览器理解键应该被标识为字符串而不是数字(但不附加任何空格、_ 或任何其他特殊字符)

请推荐!!

这是我遇到这个问题的示例代码片段。

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

此脚本生成的选择选项根据 IE9 中的 ID 进行排序,我需要的顺序与插入的顺序相同。

最佳答案

属性枚举顺序在 ECMAScript 5 及之前的版本(撰写本文时的当前版本)中未定义,并且在浏览器之间有所不同,因此您不应依赖任何特定的顺序。如果您需要可预测的顺序,请使用数组和 forwhile 循环。对于您的示例,一个选项是:

var arr = [
{rank: "5", name: "John"},
{rank: "1", name: "Kumar"},
{rank: "3", name: "Rajesh"},
{rank: "2", name: "Yogesh"}
];

for (var i = 0; i < arr.length; ++i) alert(arr[i].rank);

最后一点:使用 for...in 循环时的枚举顺序不能保证用于任何类型的对象,包括数组,因此您应该始终使用 forwhile 当顺序很重要时。

关于javascript - 迭代顺序在 IE9 中不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9942132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com