我有一个用javascript代码编写的JavaScript对象,如下所示:
var rtnStr = {"000":"area000","020":"area020","030":"area030",
"040":"area040","047":"area047","049":"area049",
"050":"area050","060":"area060","070":"area070",
"100":"area100", "900":"area900"};
for (var key in rtnStr) {
document.write('rtnStr[' + key + ']= ' + rtnStr[key] + '<br />');
}
然后我在浏览器中运行代码,得到了结果:
rtnStr[100]= area100
rtnStr[900]= area900
rtnStr[000]= area000
rtnStr[020]= area020
rtnStr[030]= area030
rtnStr[040]= area040
rtnStr[047]= area047
rtnStr[049]= area049
rtnStr[050]= area050
rtnStr[060]= area060
rtnStr[070]= area070
对象字段(键)序列与我声明的不一样,如何得到如下结果?
rtnStr[000]= area000
rtnStr[020]= area020
rtnStr[030]= area030
rtnStr[040]= area040
rtnStr[047]= area047
rtnStr[049]= area049
rtnStr[050]= area050
rtnStr[060]= area060
rtnStr[070]= area070
rtnStr[100]= area100
rtnStr[900]= area900
答案 0 :(得分:1)
JavaScript对象是无序的。
如果要按排序顺序输出其属性,请执行以下操作:
答案 1 :(得分:0)
var rtnStr = {"000":"area000","020":"area020","030":"area030",
"040":"area040","047":"area047","049":"area049",
"050":"area050","060":"area060","070":"area070",
"100":"area100", "900":"area900"};
array_ = [];
for (var key in rtnStr) {
array_.push(key)
}
array_.sort();
for (var key in array_) {
document.write('rtnStr[' + key + ']= ' + rtnStr[key] + '<br />');
}
答案 2 :(得分:0)
正如@Quentin所提到的,JavaScript对象中属性的顺序是未定义的。该规范甚至没有提及是否会按不同的for..in
以相同的顺序返回属性。
您可以做的是获取数组中的键并对其进行排序:
var rtnStr = {"000":"area000","020":"area020","030":"area030",
"040":"area040","047":"area047","049":"area049",
"050":"area050","060":"area060","070":"area070",
"100":"area100", "900":"area900"};
var keys = Object.keys(rtnStr).sort().forEach(function(key){
document.write('rtnStr[' + key + ']= ' + rtnStr[key] + '<br />');
});
MDN有一个Object.keys的页面,您可以在其中找到它所使用的浏览器,并为那些它没有填充的填充物填充。
需要注意的一点是,您的初始版本代码也会在继承的属性上进行迭代。这通常被认为是不安全的,Object.keys
没有表现出这种行为。