Javascript 只有在迭代过程中,对象的循环顺序才可能被打破?

Javascript 只有在迭代过程中,对象的循环顺序才可能被打破?,javascript,object,iteration,for-in-loop,Javascript,Object,Iteration,For In Loop,我想通过对象循环的首选方式是: for (var prop in obj) { if( obj.hasOwnProperty( prop ) ) { console.log("obj." + prop + " = " + obj[prop]); } } MDN说 删除、添加或修改属性 for…in循环以任意顺序对对象的属性进行迭代(请参阅delete操作符以了解为什么不能依赖于迭代的表面顺序,至少在跨浏览器设置中是如此) 因此,如果我在迭代期间不修改对象属性,我可以保证正确的

我想通过对象循环的首选方式是:

for (var prop in obj) {
  if( obj.hasOwnProperty( prop ) ) {
    console.log("obj." + prop + " = " + obj[prop]);
  } 
}
MDN说

删除、添加或修改属性 for…in循环以任意顺序对对象的属性进行迭代(请参阅delete操作符以了解为什么不能依赖于迭代的表面顺序,至少在跨浏览器设置中是如此)

因此,如果我在迭代期间不修改对象属性,我可以保证正确的顺序,即键/属性在对象中出现的顺序,或者此语句表示其他内容?

状态:

…所有主要浏览器都支持基于最先添加的属性的迭代顺序。。。但是,在Internet Explorer的情况下,当对属性使用delete[并]添加回具有相同名称的属性时,该属性将在其旧位置进行迭代——而不是在迭代序列的末尾

说明:

var obj={};
obj.x=1;
对象y=2;
对象z=3;
var a=[];
对于(obj中的var i)a.push(i);
删除obj.y;
对象y=2;
var b=[];
对于(obj中的var i)b.push(i);

文件。写入(“1:+a+”
2:+b)没有“正确”的顺序。不应依赖属性顺序。因此,在对象中循环时,无法保证顺序?您可以使用
object.keys()
提取属性名称,然后通过对列表(或任何您想要的内容)排序来强制执行您自己的顺序。属性本身没有任何顺序。“属性本身没有任何顺序。”啊,这就是为什么。谢谢,上面写着“见删除操作员”,如果你看到了,上面写着:“所有主要浏览器都支持基于最早添加的属性的迭代顺序……但是,在Internet Explorer(讨厌的东西…)的情况下,”这是ES5和ES6的一个优点。我主要做NodeJS,他们很擅长将ES6与浏览器结合起来。