Wil*_*ill 3 javascript google-chrome
我似乎只在chrome(而不是IE,FF)中遇到了一个有趣的问题.给出以下对象:
var myObj = {
"59" : "Hello",
"52" : "and",
"50" : "how",
"31" : "are",
"65" : "you"
};
Run Code Online (Sandbox Code Playgroud)
通过for循环遍历此对象按以下顺序吐出内容:
for(var j in myObj) { document.write(myObj[j] +', '); }
are, how, and, hello, you
Run Code Online (Sandbox Code Playgroud)
所有其他主要浏览器都以"正确"的顺序给出它.Chrome将键视为整数而不是字符串.问题是我有一个json数据源我无法更改,我需要按照它们在对象中的顺序访问这些项目.
任何人都可以建议在Google Chrome中执行此操作吗?
在通过对象迭代时for...in,不保证属性的顺序.你无能为力:
甲
for...in某对象的以任意的顺序的属性循环迭代(见删除操作符以获得更多关于为什么可以不依赖于迭代的似乎有序,至少在一个跨浏览器设置).
并从delete页面:
虽然ECMAScript使对象的迭代顺序依赖于实现,但似乎所有主流浏览器都支持基于最先添加的属性的迭代顺序(至少对于不在原型上的属性).但是,对于Internet Explorer,当在属性上使用delete时,会产生一些令人困惑的行为,从而阻止其他浏览器将对象文字等简单对象用作有序关联数组.在资源管理器中,虽然属性值确实设置为未定义,但如果后来添加了一个具有相同名称的属性,则该属性将在其旧位置迭代 - 而不是在迭代序列的末尾,正如人们可能期望的那样删除了该属性,然后将其添加回来.
因此,如果要在跨浏览器环境中模拟有序关联数组,则必须使用两个单独的数组(一个用于键,另一个用于值),或者构建一个单属性对象数组等. .
| 归档时间: |
|
| 查看次数: |
214 次 |
| 最近记录: |