Javascript 中的"for…in"循环是否按照声明的顺序循环遍历哈希表/元素?
我希望使用的对象将被声明一次并且永远不会被修改。

假设我有:

var myObject = { A: "Hello", B: "World" };

我进一步将它们用于:

for (var item in myObject) alert(item + " : " + myObject[item]);

在大多数不错的浏览器中,我可以期望"A:“Hello"“总是出现在"B:“World"“之前吗?

答案

引用约翰·雷西格的话

目前,所有主要浏览器都按照对象的属性定义顺序循环遍历它们。

枚举属性的机制…取决于实现。

然而,规范与实现有很大不同。

所有的浏览器定义秩序的尊重Chrome 除外和 Opera 对每个非数字属性名称执行此操作。Object.keys以及。

这个例子应该可以清楚地说明发生了什么:

var obj = {
  "first":"first",
  "2":"2",
  "34":"34",
  "1":"1",
  "second":"second"
};
for (var i in obj) { console.log(i); };
// Order listed:
// "1"
// "2"
// "34"
// "first"
// "second"

其技术细节并不重要,重要的是它可能随时发生变化。

简而言之:Use an array if order is important to you.

来自: stackoverflow.com