JS对象密钥序列

JS object key sequence

本文关键字:密钥 对象 JS      更新时间:2023-09-26

javascript是否保证即使为键分配了新值,也能保留对象的键序列?

例如,如果我有以下对象

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

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

我的问题是,序列会一直保持不变,还是在任何情况下都可能改变?

好吧,在文档(MDN)中说得很清楚:

A代表。。。in循环在任意顺序。

本节文档对此进行了更全面的解释:

尽管ECMAScript使对象的迭代顺序取决于实现,所有主要浏览器支持基于最早添加的属性的迭代顺序首先(至少对于不在原型上的属性)。然而,在在Internet Explorer的情况下,当对属性使用删除时混淆行为结果,阻止其他浏览器使用简单的对象像有序关联数组的对象文字。

在资源管理器中,虽然属性值确实设置为未定义,但如果稍后添加回具有相同名称的属性,该属性将在原来的位置迭代,而不是在迭代结束时删除属性和然后把它加回来。