即使将新值分配给某个键,javascript 是否也能保证保留对象的键序列?
例如,如果我有以下对象
var Object = {
keyX: value1,
keyB: value2,
keyZ: value3
}
如果我使用迭代键for .. in
,我得到正确的顺序,即keyX, keyB, keyZ
。如果我改变的值keyB
,我在迭代中仍然得到相同的序列。
我的问题是,序列会始终保持不变,还是在任何情况下都可能发生变化?
嗯,文档中说得很清楚(MDN https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/for...in):
for...in 循环迭代对象的属性
任意顺序。
And 本节 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/delete#Cross-browser_issues文档对此给出了更全面的解释:
尽管 ECMAScript 制定了对象的迭代顺序
依赖于实现,似乎所有主要浏览器
支持基于最早添加的属性的迭代顺序
首先(至少对于不在原型上的属性)。然而,在
以 Internet Explorer 为例,当对某个属性使用删除时,某些
混淆行为结果,阻止其他浏览器使用
简单的对象,如对象文字作为有序关联数组。
在资源管理器中,虽然属性值确实设置为未定义,但如果
稍后添加回具有相同名称的属性,该属性将
在原来的位置进行迭代——而不是在迭代结束时
删除该属性后的顺序如人们所期望的那样
然后将其添加回来。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)