Javascript中的“for…in”循环是否按照声明的顺序遍历哈希表/元素?有没有浏览器是不按顺序执行的?
我希望使用的对象只声明一次,永远不会被修改。
假设我有:
var myObject = { A: "Hello", B: "World" };
我进一步将它们用于:
for (var item in myObject) alert(item + " : " + myObject[item]);
在大多数像样的浏览器中,“A:“Hello”总是出现在“B:“World”之前吗?
订单不可信。Opera和Chrome都返回无序的属性列表。
<script type="text/javascript">
var username = {"14719":"A","648":"B","15185":"C"};
for (var i in username) {
window.alert(i + ' => ' + username[i]);
}
</script>
上面的代码显示了Opera中的B, A, C和Chrome中的C, A, B。
迭代顺序也与删除属性有关,但在这种情况下仅针对IE。
var obj = {};
obj.a = 'a';
obj.b = 'b';
obj.c = 'c';
// IE allows the value to be deleted...
delete obj.b;
// ...but remembers the old position if it is added back later
obj.b = 'bb';
for (var p in obj) {
alert(obj[p]); // in IE, will be a, bb, then c;
// not a, c, then bb as for FF/Chrome/Opera/Safari
}
如果http://code.google.com/p/v8/issues/detail?id=164上的讨论有任何指示的话,那么改变规范以修正迭代顺序的愿望似乎是开发人员中相当流行的愿望。
订单不可信。Opera和Chrome都返回无序的属性列表。
<script type="text/javascript">
var username = {"14719":"A","648":"B","15185":"C"};
for (var i in username) {
window.alert(i + ' => ' + username[i]);
}
</script>
上面的代码显示了Opera中的B, A, C和Chrome中的C, A, B。