我在尝试运行代码时遇到此错误:
第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 :(得分:0)
问题在于:
i<=winComb.length
最终,i
最终会成为winComb.length
,因此winComb[i]
将是未定义的。您可能知道,javascript中的数组在0
和length-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