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可以做到这一点,除了少数情况。[…] ECMAScript规范明确未定义此行为。在ECMA-262中,第12.6.4节:
枚举属性的机制……取决于实现。
但是,规范与实现完全不同。ECMAScript的所有现代实现都按照定义它们的顺序遍历对象属性。因此,Chrome小组认为这是一个错误,并将予以修复。
除了Chrome和Opera以外,所有浏览器都遵循定义顺序,而Chrome则对每个非数字属性名称都遵循。在这两种浏览器中,属性是按顺序拉到第一个非数字属性之前的(这与它们实现数组的方式有关)。顺序也相同Object.keys。
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"
它的技术性不如可能随时更改的事实重要。不要依赖保持这种状态的事物。
简而言之:如果顺序对您很重要,请使用数组。