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

回到顶部