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 是否指定这种级别的顺序保存?

无论哪种情况,它是可靠的吗?

不,Javascript规范明确地不要求任何特定的枚举顺序,根据定义是无序的。

参见ECMAScript规范的12.6.4节:

列举属性的机制和顺序…

不能保证属性会按照定义的顺序出现

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

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

最新更新