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.