给定一个对象定义:
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是否规定了这种级别的顺序保留?
无论哪种情况,它都是可靠的吗?
给定一个对象定义:
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是否规定了这种级别的顺序保留?
无论哪种情况,它都是可靠的吗?
Object.keys
必须按照与for...in循环中这些值出现的顺序相同的顺序产生键,特别是如果它对顺序有任何更强的保证。它只是不需要特定的顺序。 - cHaofor (feature in features) { if (feature.isDetectable) { feature.useFeatureDetection() } else { feature.avoidLikeThePlague() } }
- svidgenfor...in
。)除非命令被明确指定,否则如果你依赖它,你正在编写本质上有缺陷的代码(只是暂时能够工作)。当你的代码出现问题时,你会抱怨浏览器错误,我们将不得不再次进行这个对话,我将不得不说“我告诉过你”,然后你将不得不去改变一堆代码。 - cHao不能保证属性以定义的顺序出现。
一些浏览器将保留按定义顺序排列的属性,而其他浏览器则不会。
将JSON解析为JavaScript对象之外的内容时,JSON解析器可以保留源中的顺序,否则无法保证顺序。
{"a": 1, "b": 2}
和{"b": 2, "a": 1}
在JSON方面是相同的,因此解析器应将它们解析为结构也相同。 - Paul