我知道,并不是每个浏览器都会按照循环时添加的顺序输出对象项。 但是,如果我第二次循环访问一个对象,我可以确定它会按照与之前相同的顺序输出项目,但请记住,它一定不能按照添加的顺序排列?
最佳答案
But if I loop through an object a second time, can I be sure, that it will output the items in the same order as before...
如果您以任何方式修改对象,则不会。即使您不这样做,那么您也依赖于未记录的行为,因为无法保证访问属性的顺序,包括不保证随后会以相同的顺序访问它们次。
如果您需要可靠的东西,请考虑使用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>
关于Javascript对象多次循环,顺序相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28936867/