Jer*_*rry 7 javascript associative-array google-chrome
好的,所以在网页上,我有一个JavaScript对象,我用它作为一个关联数组.当页面加载时,这在脚本块中静态存在:
var salesWeeks = {
"200911" : ["11 / 2009", "Fiscal 2009"],
"200910" : ["10 / 2009", "Fiscal 2009"],
"200909" : ["09 / 2009", "Fiscal 2009"],
"200908" : ["08 / 2009", "Fiscal 2009"],
"200907" : ["07 / 2009", "Fiscal 2009"],
"200906" : ["06 / 2009", "Fiscal 2009"],
"200905" : ["05 / 2009", "Fiscal 2009"],
"200904" : ["04 / 2009", "Fiscal 2009"],
"200903" : ["03 / 2009", "Fiscal 2009"],
"200902" : ["02 / 2009", "Fiscal 2009"],
"200901" : ["01 / 2009", "Fiscal 2009"],
"200852" : ["52 / 2008", "Fiscal 2009"],
"200851" : ["51 / 2008", "Fiscal 2009"]
};
Run Code Online (Sandbox Code Playgroud)
键/值对的顺序是有意的,因为我将对象转换为HTML选择框,如下所示:
<select id="ddl_sw" name="ddl_sw">
<option value="">== SELECT WEEK ==</option>
<option value="200911">11 / 2009 (Fiscal 2009)</option>
<option value="200910">10 / 2009 (Fiscal 2009)</option>
<option value="200909">09 / 2009 (Fiscal 2009)</option>
<option value="200908">08 / 2009 (Fiscal 2009)</option>
<option value="200907">07 / 2009 (Fiscal 2009)</option>
<option value="200906">06 / 2009 (Fiscal 2009)</option>
<option value="200905">05 / 2009 (Fiscal 2009)</option>
<option value="200904">04 / 2009 (Fiscal 2009)</option>
<option value="200903">03 / 2009 (Fiscal 2009)</option>
<option value="200902">02 / 2009 (Fiscal 2009)</option>
<option value="200901">01 / 2009 (Fiscal 2009)</option>
<option value="200852">52 / 2008 (Fiscal 2009)</option>
<option value="200851">51 / 2008 (Fiscal 2009)</option>
</select>
Run Code Online (Sandbox Code Playgroud)
...代码看起来像这样(从函数中剪断):
var arr = [];
arr.push(
"<select id=\"ddl_sw\" name=\"ddl_sw\">" +
"<option value=\"\">== SELECT WEEK ==</option>"
);
for(var key in salesWeeks)
{
arr.push(
"<option value=\"" + key + "\">" +
salesWeeks[key][0] + " (" + salesWeeks[key][1] + ")" +
"<\/option>"
);
}
arr.push("<\/select>");
return arr.join("");
Run Code Online (Sandbox Code Playgroud)
这一切都适用于IE,FireFox和Opera.
但是在Chrome中,订单很奇怪:
<select id="ddl_sw" name="ddl_sw">
<option value="">== SELECT WEEK ==</option>
<option value="200852">52 / 2008 (Fiscal 2009)</option>
<option value="200908">08 / 2009 (Fiscal 2009)</option>
<option value="200906">06 / 2009 (Fiscal 2009)</option>
<option value="200902">02 / 2009 (Fiscal 2009)</option>
<option value="200907">07 / 2009 (Fiscal 2009)</option>
<option value="200904">04 / 2009 (Fiscal 2009)</option>
<option value="200909">09 / 2009 (Fiscal 2009)</option>
<option value="200903">03 / 2009 (Fiscal 2009)</option>
<option value="200905">05 / 2009 (Fiscal 2009)</option>
<option value="200901">01 / 2009 (Fiscal 2009)</option>
<option value="200910">10 / 2009 (Fiscal 2009)</option>
<option value="200911">11 / 2009 (Fiscal 2009)</option>
<option value="200851">51 / 2008 (Fiscal 2009)</option>
</select>
Run Code Online (Sandbox Code Playgroud)
注意:此订单虽然很奇怪,但在后续刷新时不会改变.它始终按此顺序排列.
那么,Chrome在做什么?它如何处理循环的一些优化?
首先,我依赖于在任何关联数组中声明键/值对的顺序是错误的吗?
我之前从未质疑它,我只是假设订单会持续,因为这种技术在其他浏览器中一直对我有效.但我想我从来没有看到它说明订单得到保证.也许不是吗?
任何见解都会很棒.谢谢.
Bar*_*own 10
将关联数组视为纸袋,所有键值对都放在纸袋中.当你把手伸进麻袋里看看对子(比如for ... in循环),你遇到它们的顺序是出于所有实际目的而随机的.
如果要按特定顺序查看它们,则需要将密钥提取到数组中并对其进行排序.然后遍历数组,使用您遇到的键索引到关联数组.
| 归档时间: |
|
| 查看次数: |
7389 次 |
| 最近记录: |