即使将新值分配给某个键,javascript也会保证对象的键序列保留吗?
例如,如果我有以下对象
var Object = {
keyX: value1,
keyB: value2,
keyZ: value3
}
如果我使用for .. in
迭代键,我会得到正确的序列,即keyX, keyB, keyZ
。如果我改变keyB
的值,我仍然在迭代中获得相同的序列。
我的问题是,序列是否始终保持不变,或者在任何情况下都可能发生变化?
答案 0 :(得分:6)
嗯,在文档(MDN)中很清楚地说:
for ... in循环迭代一个对象的属性 任意顺序。
this section文档对此提供了更全面的解释:
尽管ECMAScript生成了对象的迭代顺序 依赖于实现,它可能看起来是所有主流浏览器 支持基于最早添加的属性的迭代顺序 首先(至少对于不在原型上的属性)。但是,在 在Internet Explorer的情况下,当一个人在一个属性上使用delete时,有些人 混淆行为结果,阻止其他浏览器使用 像对象文字这样的简单对象作为有序关联数组。
在资源管理器中,虽然属性值确实设置为undefined,if 一个后来添加了一个具有相同名称的属性,属性将 在旧的位置迭代 - 而不是在迭代结束时 在删除了属性之后,人们可能会想到一个序列 然后把它加回来。