无法读取属性'长度'未定义的4

时间:2013-11-24 17:18:12

标签: javascript

我在尝试运行代码时遇到此错误:

第31行的

:无法读取未定义的属性“长度”

<script type="text/javascript">

var winComb = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [1, 4, 7], [2, 5, 8], [3, 6, 9], [1, 5, 9], [3, 5, 7]];
var cells = new Array(9);
var playerName = $_POST['player'];
var chtr = $_POST['emotion'];
var uchtr = "";

if(chtr=="xChar"){
    chtr="x";
    uchtr="o";
}
else{
    chtr="o";
    uchtr="x";
}

function player(id){

    win();
    insert(id, "p");
    computer();
}

function computer(){

    var x = 0;

    for(var i=0;i<=winComb.length;i++){

        for(var j=0;j<winComb[i].length;j++){

            if(winComb[i][j]==chtr){

                x++;
            }

            if(x==2){

                for(var k=0;k<winComb[i].length;k++)

                    if(winComb[i][j]==""){

                        insert(winComb[i][j], "c");
                    }
            }
        }
    }
}

function shortWinComb(){

    var a = winComb;

    for(var k=1;k<=cells.length;k++){

        if(cells[k]==""){

            for(var i=0;i<a.length;i++){

                for(var j=0;i<=a[i].length;i++){

                    if(winComb[i][j]==k){

                        a = a - a[i];
                    }
                }
            }
        }
    }

    return a;
}

function win(){

    var x = 0;

    if(!cells==null)

    for(var i=0;i<=shortWinComb().length;i++){

        for(var j=0;i<=shortWinComb()[i].length;i++){

            if(shortWinComb()[i][j]==chtr){

                x++;
            }

            if(x==3){

                for(var k=1;k<=9;k++){

                    lockCell(k);
                }

                alert("*~*~* "+player+" Wins ! *~*~*");
            }

            else if(shortWinComb()[i][j]==uchtr){

                x++;
            }

            if(x==3){

                for(var k=1;k<=9;k++){

                    lockCell(k);
                }

                alert("*~*~* Computer Wins ! *~*~*");
            }
        }

        x = 0;
    }
}

function insert(id, actor){

    var cell = document.getElementById(id);

    if(cell.innerHTML=="")
        if(actor=="p")
            cell.innerHTML = "<img src=images/"+chtr+".png>";
        else
            cell.innerHTML = "<img src=images/"+uchtr+".png>";

    for(var i=1; i<=cells.length;i++){

        if(id==i){
            if(actor=="p")
                cells[i]==chtr;
            else
                cells[i]==uchtr;
            break;
        }
    }

    lockCell(id);
}

function lockCell(id){

    var cell = document.getElementById(id);
    cell.onclick="";
    cell.style.cursor="";
}
</script>
</head>

那么我的代码中的问题在哪里?我是js的新手,我对这些错误知之甚少。

1 个答案:

答案 0 :(得分:0)

问题在于:

i<=winComb.length

最终,i最终会成为winComb.length,因此winComb[i]将是未定义的。您可能知道,javascript中的数组在0length-1之间的索引处包含项目。

修复:

i<winComb.length
PS:错误在几个地方重复出现。 (包括从1到长度迭代的一个循环)。

PSS:如果您不必处理旧浏览器(或者可以使用polyfill来丢失功能),您可以使用更实用的方法迭代数组中的元素:

arr.forEach(function(item, index, array) {
  /* code inside loop */  
});

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach