Javascript对象多次循环,顺序相同?

标签 javascript loops object

我知道,并不是每个浏览器都会按照循环时添加的顺序输出对象项。 但是,如果我第二次循环访问一个对象,我可以确定它会按照与之前相同的顺序输出项目,但请记住,它一定不能按照添加的顺序排列?

最佳答案

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.keyssort:

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/

相关文章:

javascript - 将 DIV 滚动到绝对定位元素下方

javascript - HighchartsAdapter 不再可用,调用 adapterRun 的新方法是什么?

c++ - 如何使用循环增加指数?

c# - 用于 ViewState 存储的可序列化类对象在 c# ASP.net 中不起作用

javascript - 如何实现像 jQuery 这样的链式方法调用?

Javascript 类仅显示其中一个对象

javascript - 在循环中将动态参数传递给回调函数

javascript - 将css添加到head并使用javascript动态刷新它

loops - 如何在Ada中多次调用一个任务

python - 一旦满足条件,循环将无法终止