JS对象键序列

时间:2012-09-12 12:42:40

标签: javascript

即使将新值分配给某个键,javascript也会保证对象的键序列保留吗?

例如,如果我有以下对象

var Object = {
    keyX: value1,
    keyB: value2,
    keyZ: value3
}

如果我使用for .. in迭代键,我会得到正确的序列,即keyX, keyB, keyZ。如果我改变keyB的值,我仍然在迭代中获得相同的序列。

我的问题是,序列是否始终保持不变,或者在任何情况下都可能发生变化?

1 个答案:

答案 0 :(得分:6)

嗯,在文档(MDN)中很清楚地说:

  

for ... in循环迭代一个对象的属性   任意顺序。

this section文档对此提供了更全面的解释:

  

尽管ECMAScript生成了对象的迭代顺序   依赖于实现,它可能看起来是所有主流浏览器   支持基于最早添加的属性的迭代顺序   首先(至少对于不在原型上的属性)。但是,在   在Internet Explorer的情况下,当一个人在一个属性上使用delete时,有些人   混淆行为结果,阻止其他浏览器使用   像对象文字这样的简单对象作为有序关联数组。

     

在资源管理器中,虽然属性值确实设置为undefined,if   一个后来添加了一个具有相同名称的属性,属性将   在旧的位置迭代 - 而不是在迭代结束时   在删除了属性之后,人们可能会想到一个序列   然后把它加回来。