2013-11-24 100 views
0

我'的特性「長度」讓我'時試圖運行我的代碼此錯誤:無法讀取未定義4

上線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的新手,我不太瞭解這些錯誤。

+0

$ _POST不應該在php標籤之間? – chepe263

+0

$ _POST是從我使用的另一個js腳本聲明的變量。 – user2996426

回答

0

的問題是在這裏:

i<=winComb.length 

最終,這i最終會被winComb.length,所以winComb[i]將是不確定的。正如您可能知道的那樣,javascript中的數組的索引號在0length-1之間。

修復:

i<winComb.length 

PS:這個錯誤被重複的幾個地方。 (包括從1到長度迭代的一個循環)。

PSS:如果你沒有對付老的瀏覽器(或者可以使用填充工具缺失的功能),你可以使用數組遍歷元素的一個功能更強大的方式:

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

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

+0

謝謝你,我改變了i&j的值,忘記更改比較運算符:( – user2996426