我知道,并非每个浏览器都会按照循环时添加的顺序输出对象项。 但是,如果我第二次循环访问某个对象,我能否确定它将以与以前相同的顺序输出项目,请记住,它们不能按照添加的顺序排列?
答案 0 :(得分:2)
但如果我第二次循环一个物体,我能确定它会以与以前相同的顺序输出物品......
如果您以任何方式修改对象,则不会。即使你不这样做,那么你仍然依赖于未记录的行为,因为对于访问属性的顺序有没有保证,包括不保证它们将以后续的相同顺序被访问次。
如果您需要可靠的内容,请考虑使用Object.keys
和sort
:
Object.keys(theObject).sort().forEach(function(key) {
// The order here will reliably be alphabetical
});
请注意,Object.keys
适用于所有现代浏览器,但不适用于IE8等旧版浏览器。但它很容易被填充。
直播示例:
var obj1 = {};
obj1.a = 1;
obj1.b = 2;
obj1.c = 3;
Object.keys(obj1).sort().forEach(function(key) {
snippet.log(key);
});
var obj2 = {};
obj2.c = 3;
obj2.b = 2;
obj2.a = 1;
Object.keys(obj2).sort().forEach(function(key) {
snippet.log(key);
});
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
答案 1 :(得分:1)
不确定,我认为它会,但你可以确保它会这样做,如果你使用这样的排序键数组:
var keys = Object.keys(myObject).sort();
keys.forEach(function (key) {
// Access the value
myObject[key]
});