2

要遍历一个 javascript 对象,你可以这样做

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

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

4

2 回答 2

5

那是不可能的

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

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

被枚举对象的属性可能在枚举过程中被删除。如果在枚举期间还没有访问过的属性被删除,那么它就不会被访问。如果在枚举过程中向正在枚举的对象添加了新属性,则不保证在活动枚举中访问新添加的属性。在任何枚举中不能多次访问属性名称。ES5 规格

但是,您可以做的是向后迭代对象的键数组。这并不意味着你神奇地给对象一个命令。

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

于 2013-10-18T12:31:09.993 回答
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/

于 2013-10-18T12:27:04.783 回答