JavaScript和/或JSON是否要求解析器按定义顺序枚举属性?

时间:2013-06-06 20:08:25

标签: javascript json

给定对象定义:

var o = {x :1, y:2, z: 3, b: 4, a: 5, m: 6, X: 7};

在枚举时,Chrome 会出现以尊重定义属性的顺序:

for (var i in o) { console.log(i, o[i]); }

收率:

x 1
y 2
z 3
b 4
a 5
m 6
X 7

JavaScript和/或JSON 是否指定此级别的订单保存?

在任何一种情况下,它都可靠吗?

2 个答案:

答案 0 :(得分:9)

不,Javascript规范显式需要任何特定的枚举顺序,它们按照定义无序。

请参阅12.6.4 of the ECMAScript specification部分:

  

未指定枚举属性的机制和顺序。

答案 1 :(得分:1)

无法保证属性按照定义的顺序显示。

某些浏览器会按照定义的顺序保留属性,其他浏览器则不会。

将JSON解析为Javascript对象以外的JSON解析器可以保留源的顺序,否则无法保证它。