如果我创建这样的对象:
var obj = {};
obj.prop1 = "Foo";
obj.prop2 = "Bar";
Run Code Online (Sandbox Code Playgroud)
生成的对象总是这样吗?
{ prop1 : "Foo", prop2 : "Bar" }
Run Code Online (Sandbox Code Playgroud)
也就是说,属性是否与我添加它们的顺序相同?
这是情况.我有一个JavaScript对象,我需要遍历它,但顺序是非常重要的维护.我知道JavaScript对象应该是无序的,但我希望有一些JavaScript等效于以下内容:http://docs.python.org/2/library/collections.html#collections.OrderedDict
这是原始订购
{
082013: {'A': 1, 'B', 3}
092013: {'A': 2, 'B', 4}
102013: {'A': 8, 'B', 2}
112013: {'A': 92, 'B', 67}
122013: {'A': 64, 'B', 32}
}
Run Code Online (Sandbox Code Playgroud)
然后我迭代它:
aArray = [];
bArray = [];
$.each(data, function(key, value) {
aArray.push(value.A);
bArray.push(value.B);
});
Run Code Online (Sandbox Code Playgroud)
结果(特别是在chrome上)似乎渲染更像这样:
aArray = [8, 92, 64, 1, 2];
bArray = [2, 67, 32, 3, 4];
Run Code Online (Sandbox Code Playgroud)
这意味着它不按顺序迭代,或按最小到最大的顺序进行迭代(102013,112013,122013,092013,082013)
那么我怎么能按顺序迭代这个对象,如果我可以的话呢?
在Firefox中,输出按字母顺序排序(这是它们声明的顺序).在IE和Chrome中它们是数字的.所有最新版本.
哪个是对的?
<html>
<head></head>
<body>
<script type="text/javascript">
function makeArray()
{
var array = [{5:'Five',4:'Four',1:'One',3:'Three',2:'Two'}];
var msg = '';
for (var val in array[0])
{
msg = msg + val;
}
alert(msg);
}
</script>
<input type="button" onClick="makeArray();" value="Press Me" />
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
Back Story ...在SpiraTeam(我们当前的错误跟踪系统)中,许多列表(用户,模块等)使用与上述类似的格式进行排序.除非你使用FireFox,否则这会使查找内容变得非常困难和烦人.我的兴趣纯粹是学术性的,我只是问,因为我想知道哪个浏览器是正确的.