在 IE9 中,对象属性的数字键是排序的,这导致 IE9 中的迭代顺序与 IE8 不同,在 IE8 中插入时保留顺序。
var obj = {
"5": "John",
"1": "Kumar",
"3": "Rajesh",
"2": "Yogesh"
}
for(var key in obj) alert(key)
Result
//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(撰写本文时的当前版本)及包括版本中未定义,并且在浏览器之间有所不同,因此您不应依赖任何特定的顺序。如果您需要可预测的排序,请使用数组和for
or while
环形。对于您的示例,一种选择是:
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
不保证任何类型的对象(包括数组)循环,因此您应该始终使用for
or while
当顺序很重要时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)