2017-05-29 81 views
2

javascript对象按键的升序顺序排序吗?Javascript对象按键排序本身

我第一次注意到它。

/* It does maintain a order. The order in which you inserts the value. And if it does not maintain any orders, please show me example, that will be really helpful to understand me the concepts. 
 

 
Thanks in advance. 
 
*/ 
 

 
var a = {"13" : "1", "15" : "2", "14" : "3", "12" : "4"}; 
 

 
console.log(JSON.stringify(a)); /* This is nothing to do with for loop */ 
 

 
for(let i in a) { 
 
\t console.log(i + " = " + a[i]); 
 
} 
 
/* But the keys other than numbers are not sorting. */ 
 
var b = {"c" : "1", "a" : "2", "b" : "3", "d" : "4"}; 
 

 
for(let i in b) { 
 
\t console.log(i + " = " + b[i]); 
 
}

第一个目的通过本身排序。我正在为这两个对象创建键作为字符串。但第二个对象不是排序。

回答

2

此行为是现在JavaScript standard的一部分:

  • 邻的每个自己的财产密钥P是一个整数指数,在上升的数字索引顺序

    a。将P添加为键的最后一个元素。

  • 邻的每一个自己的财产P键是一个字符串,但不是整数指数,房地产创造的次序

    一个。将P添加为键的最后一个元素。

  • 下面是详细的解释:

    http://2ality.com/2015/10/property-traversal-order-es6.html

    总之,理由如下:

    • 逻辑上,顺序应该是重要的,程序员应该而不是依赖它。
    • 然而,大多数浏览器产生确定性的顺序,程序实际上取决于这个顺序。如果浏览器改变他们的顺序,一些程序开始“破坏”。
    • 下面是解决这个问题的两种不同的方法:
      • 确认的标准顺序是确定性---使程序员可以正确地依赖于它。
      • 强制程序员通过在程序的每次运行中生成不同的顺序来理解此问题。
    • 从历史上看,第二种解决方案更容易实现(至少这是我从使用Perl时记得的)。但今天,第一种选择更容易。
    • 因此,标准化机构决定制定标准的确定性订单部分。
    0

    我发现this answer与您所问的问题有关。

    报价:

    这是V8的方式处理关联数组。已知问题问题164 但它遵循规范,因此标记为“按预期工作”。有 不是通过关联数组循环的必需顺序。

    一个简单的解决办法是,先于数值与字母,例如: “size_7”:[“9149”,“9139”]等

    该标准将在未来的ECMAScript规范强制改变[铬] 开发者改变这一点。