JavaScript元素按“ for(…in…)”循环排序
Javascript中的“ for…in”循环是否按声明的顺序遍历哈希表/元素?有没有按顺序执行的浏览器?
我希望使用的对象将被声明 一次, 并且永远不会被修改。
假设我有:
var myObject = { A: "Hello", B: "World" };
我进一步将它们用于:
for (var item in myObject) alert(item + " : " + myObject[item]);
我是否可以期望在大多数体面的浏览器中,“ A:“ Hello””总是排在“ B:“ World””之前?
回答:
当前,所有主流浏览器都按照定义它们的顺序遍历对象的属性。Chrome可以做到这一点,除了少数情况。[…]
ECMAScript规范明确未定义此行为。在ECMA-262中,第12.6.4节:
枚举属性的机制……取决于实现。
但是,规范与实现完全不同。ECMAScript的所有现代实现都按照定义它们的顺序遍历对象属性。因此,Chrome小组认为这是一个错误,并将予以修复。
除了Chrome和Opera以外,所有浏览器都遵循定义顺序,而Chrome则对每个非数字属性名称都遵循。在这两种浏览器中,属性是按顺序拉到第一个非数字属性之前的(这与它们实现数组的方式有关)。顺序也相同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"
它的技术性不如可能随时更改的事实重要。不要依赖保持这种状态的事物。
简而言之:如果顺序对您很重要,请使用数组。
以上是 JavaScript元素按“ for(…in…)”循环排序 的全部内容, 来源链接: utcz.com/qa/426847.html