邓华

BlogJava 联系 聚合 管理
  48 Posts :: 0 Stories :: 149 Comments :: 0 Trackbacks
当加入prototype.js后, 不再推荐用for in 循环了. 但由此带来了问题.

比如这段代码

<script>
 
var a=[];
 a[
"a"]="aa";
 a[
"b"]="b";

 
for(var o in a){
   document.write(a[o]);
   document.write(
"<br />");
 }
</script>


这个时候,用for in是没有问题的.
但当们加入了prototype.js后,用prototype的each循环
<script src='http://images.chinaren.com/product/webim/version/2.0/js/libs/prototype.js'></script>

<script>
 
var a=[];
 a[
"a"]="aa";
 a[
"b"]="b";

  $H(a).each(
function(item){
      document.write(a[o]);
      document.write(
"<br />");
 });
</script>

这段代码并不会打出任何值.

问题出在哪里?


var a=[]
改成
var a={}

就正常了.

原理上还未知是什么原因, 可能是由于要把a设成一个对象,$H是出来的对象的属性,而不是数组.



posted on 2007-11-28 23:10 邓华的碎碎念 阅读(1548) 评论(3)  编辑  收藏

Feedback

# re: prototype中each循环产生的怪异现象 2007-11-29 16:42 walnutprince
你看看源码  回复  更多评论
  

# re: prototype中each循环产生的怪异现象 2007-11-30 14:15 专注java开源
http://www.agilesource.org

开源框架

  回复  更多评论
  

# re: prototype中each循环产生的怪异现象 2007-12-07 00:16 xiongharry
var a=[];
这里有两个语意
1、a是一个数组
2、a同时也是一个对象
a["a"]="aa";
等同于a.a ="aa",这时a是一个对象
foreach 是针对于对象的

$H函数在处理对象a的时候可能优先处理它的 数组 特性吧 而数组本身是空的,所以不输出任何东西
  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: