鉴于对象:
var opts = {
'all': 'All',
0: 'Some option',
1: 'Cookies',
};
Object.keys(opts)
会返回此信息:
["0", "1", "all"]
当我期待这一点:
["all", "0", "1"] // The order in which the keys are 'declared' in the obj
如何按照它们在对象中出现的顺序迭代属性?
感谢。
答案 0 :(得分:2)
ECMA-262, section 12.6.4关于for-in声明:
未指定枚举属性的机制和顺序(第一个算法中的步骤6.a,第二个算法中的步骤7.a)。
您可以改为使用数组:
var opts = [
{key: 'all', value: 'All'},
{key: 0, value: 'Some option'},
{key: 1, value: 'Cookies'}
];
或者,在ES6中,Map对象:
var opts = new Map([
['all', 'All'],
[0, 'Some option'],
[1, 'Cookies']
]);
opts.forEach(function(val, key) {
console.log(key, val);
});
在这种情况下,forEach
将始终按插入顺序迭代键值对。
答案 1 :(得分:0)
不,在JavaScript中不保证对象中的属性顺序,您需要使用数组。