<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>问题</title>
</head><body>
<table border="1">
<tr>
<th>一月</th>
<th>二月</th>
<th>三月</th>
<th>四月</th>
<th>五月</th>
</tr>
<tr>
<td id="yuefen1_0">aaa</td>
<td id="yuefen2_0">bbb</td>
<td id="yuefen3_0">ccc</td>
<td id="yuefen4_0">ddd</td>
<td id="yuefen5_0">eee</td>
</tr>
<tr>
<td id="yuefen1_1">fff</td>
<td id="yuefen2_1">ggg</td>
<td id="yuefen3_1">hhh</td>
<td id="yuefen4_1">jjj</td>
<td id="yuefen5_1">kkk</td>
</tr>
<tr>
<td id="yuefen1_2">lll</td>
<td id="yuefen2_2">mmm</td>
<td id="yuefen3_2">nnn</td>
<td id="yuefen4_2">ooo</td>
<td id="yuefen5_2">ppp</td>
</tr>
</table>
<input type="hidden" id="rowCount" value="3" /> 
<script type="text/javascript">
window.onload=function(){
var rowCount=document.getElementById("rowCount").value;
for(var i=0;i<rowCount;i++){
var yuefen=new YueFen(i);
yuefen.show();
}
} function YueFen(index){
this.yuefen=new Array(3); this.init=function(){
//var length=this.yuefen.length;
for(var i=0;i<this.yuefen.length;i++){
var nowyf=document.getElementById("yuefen"+(i+1)+"_"+index);
this.yuefen.push(nowyf);
}
return true;
} this.show=function(){
this.init();
//for(var i=0;i<)
alert('能显示这句话!');
}
}
</script>
</body>
</html>运行如上代码,浏览器会直接卡死.但如果把YueFen类中的init方法中的for循环的条件改为i<3就能运行正常。令人纳闷的是,this.yuefen.length本身就等于3,你可以定义一个变量然后打印它,但就是不能将这个表达式作为循环的条件。如果你非要将这句话作为循环条件的话,循环体里面的this.yuefen.push(nowyf)需要改成this.yuefen[i]=nowyf才能运行正常,否则浏览器同样无法执行这段脚本。求解!!!

解决方案 »

  1.   

    push方法是:将新元素添加到一个数组中,并返回数组的新长度值//这里的this.yuefen.length不是固定的、每次都会去获取yunfen变量的length值
    for(var i=0;i<this.yuefen.length;i++){
    var nowyf=document.getElementById("yuefen"+(i+1)+"_"+index);
    //你这里每次循环都去添加、push添加后就改变了yunfen元素的length值
    this.yuefen.push(nowyf);
    }
    上面的代码要么就是死循环了.....要么就是document.getElementById("yuefen"+(i+1)+"_"+index)找不到元素、JS错误而停止执行JS脚本!
    而代码this.yuefen[i]=nowyf
    只是替换掉yuefen数组变量下标为i的数组元素值!
    并没有影响到数据本来的长度!
    document.getElementById("yuefen"+(i+1)+"_"+index)
    这句代码也会(前提是你有)找到对应的元素!
      

  2.   

    你是循环执行init,变量会变的javascript不支持这种用法for(var i=0,len=this.yuefen.length;i<len;i++){}