键入对象后退

时间:2013-10-18 12:26:08

标签: javascript object

循环浏览javascript对象

for(key in object){
   // sth. great...
}

是否可以通过对象循环使用此方法?提前谢谢。

2 个答案:

答案 0 :(得分:5)

这是不可能的

  

ECMAScript对象是无序属性集合 ES3 Specs

     

枚举属性的机制和顺序(第一个算法中的步骤6.a,第二个算法中的步骤7.a)未指定。

     

枚举期间可以删除要枚举的对象的属性。如果删除枚举期间尚未访问的属性,则不会访问该属性。如果在枚举期间将新属性添加到要枚举的对象,则无法保证在活动枚举中访问新添加的属性。在任何枚举中不得多次访问属性名称。 ES5 Specs

<子> 但是,你可以做的是在对象的关键数组上向后迭代。哪个意味着您神奇地为对象提供订单。

var obj = {a: 0, b:1, c:2};
for (var keys=Object.keys (obj),key; key = keys.pop() ;) {
    console.log (key) // c, b, a.
}

答案 1 :(得分:3)

没有“前锋”和“后退”。 JavaScript中的对象键没有顺序。

虽然大多数浏览器会按照添加的顺序遍历它们,但这并不能保证,并且不属于规范。

所以答案是:不,你不能。


如果你坚持,请这样做:

var keys = [], key, i;

for ( key in object ) {
    object.hasOwnProperty(key) && keys.push(key);
}

i = keys.length;

while ( i-- ) {
    // use object[ keys[i] ]
}

这是小提琴:http://jsfiddle.net/MBpcq/