为什么firebug告诉我我的JavaScript数组未定义?

为什么firebug告诉我我的JavaScript数组未定义?,javascript,Javascript,我刚开始用JavaScript编写一个基本的网格分析算法,但我遇到了一个让我困惑的错误 var max = 9; var testArray = new Array( ['7', '3', '9', '6', '4', '1', '5', '2', '8'], ['1', '8', '2', '7', '5', '3', '4', '6', '9'], ['9', '5', '7', '3', '8', '2', '1', '4', '6'], ['3', '1', '4', '

我刚开始用JavaScript编写一个基本的网格分析算法,但我遇到了一个让我困惑的错误

var max = 9;
var testArray = new Array(
  ['7', '3', '9', '6', '4', '1', '5', '2', '8'],
  ['1', '8', '2', '7', '5', '3', '4', '6', '9'],
  ['9', '5', '7', '3', '8', '2', '1', '4', '6'],
  ['3', '1', '4', '9', '6', '7', '2', '8', '5'],
  ['6', '2', '8', '5', '1', '4', '9', '3', '7'],
  ['5', '4', '6', '2', '9', '8', '3', '7', '1'],
  ['8', '7', '1', '4', '3', '5', '6', '9', '2'],
  ['2', '9', '3', '1', '7', '6', '8', '5', '4']
);

function checkYoSelf(myGrid) {
  var i; var j;
  var horizLine = new String;
  for( i = 0; i <= (max - 1); i++ ) {
    for( j = 0; j <= (max - 1); j++) {
      document.write(i+"<br />");
      horizLine += myGrid[i][j];
    }
    var test = RegExp(i, "ig");
    var result = new Array(horizLine.match(test));
    if( result.length > 1 ) {
      alert("fail");
    }    
  }
}

html file has <a href='#' onclick="checkYoSelf(testArray);">check</a>
var max=9;
var testArray=新阵列(
['7', '3', '9', '6', '4', '1', '5', '2', '8'],
['1', '8', '2', '7', '5', '3', '4', '6', '9'],
['9', '5', '7', '3', '8', '2', '1', '4', '6'],
['3', '1', '4', '9', '6', '7', '2', '8', '5'],
['6', '2', '8', '5', '1', '4', '9', '3', '7'],
['5', '4', '6', '2', '9', '8', '3', '7', '1'],
['8', '7', '1', '4', '3', '5', '6', '9', '2'],
['2', '9', '3', '1', '7', '6', '8', '5', '4']
);
函数checkYoSelf(myGrid){
VarI;VarJ;
var horizLine=新字符串;
对于(i=0;i 1){
警报(“失败”);
}    
}
}
html文件已被删除
根据firebug
myGrid[i]
未定义,但我不确定为什么会这样


我做错了什么?

max来自哪里

max是全局定义的(在这种情况下max=9)


你只有8行。

从你对nickf的回答的评论来看:这是因为max是9,但你在数组中只有8行。

Firebug说

最大值未定义


当最后一个索引为testArray[7]时,您正在尝试访问checkYoSelf(testArray)中的testArray[8]。testArray包含8个元素。您正在访问
testArray[8]
,这是无效的,因为索引必须为0..7(0..8-1)。将另一行添加到数组中,或将第一行重写为:

for( i = 0; i <= (max - 2); i++ ) {

for(i=0;i好吧,这对我来说很有效……我刚刚将您的“max”变量替换为更具动态性的变量:

<script type="text/javascript">
    var testArray = new Array(
        ['7', '3', '9', '6', '4', '1', '5', '2', '8'],
        ['1', '8', '2', '7', '5', '3', '4', '6', '9'],
        ['9', '5', '7', '3', '8', '2', '1', '4', '6'],
        ['3', '1', '4', '9', '6', '7', '2', '8', '5'],
        ['6', '2', '8', '5', '1', '4', '9', '3', '7'],
        ['5', '4', '6', '2', '9', '8', '3', '7', '1'],
        ['8', '7', '1', '4', '3', '5', '6', '9', '2'],
        ['2', '9', '3', '1', '7', '6', '8', '5', '4']
    );

    function checkYoSelf(myGrid) {
        var i;
        var j;
        var horizLine = new String;

        var maxRows = myGrid.length;
        for( i = 0; i < maxRows; i++ ) {
            var maxColumns = myGrid[i].length;
            for( j = 0; j < maxColumns; j++) {
                document.write(i+"<br />");
                horizLine += myGrid[i][j];
            }

            var test = RegExp(i, "ig");
            var result = new Array(horizLine.match(test));
            if( result.length > 1 ) {
                alert("fail");
            }
        }
    }
</script>

<a href='#' onclick="checkYoSelf(testArray);">check</a>

var testArray=新阵列(
['7', '3', '9', '6', '4', '1', '5', '2', '8'],
['1', '8', '2', '7', '5', '3', '4', '6', '9'],
['9', '5', '7', '3', '8', '2', '1', '4', '6'],
['3', '1', '4', '9', '6', '7', '2', '8', '5'],
['6', '2', '8', '5', '1', '4', '9', '3', '7'],
['5', '4', '6', '2', '9', '8', '3', '7', '1'],
['8', '7', '1', '4', '3', '5', '6', '9', '2'],
['2', '9', '3', '1', '7', '6', '8', '5', '4']
);
函数checkYoSelf(myGrid){
var i;
var j;
var horizLine=新字符串;
var maxRows=myGrid.length;
对于(i=0;i”);
水平线+=myGrid[i][j];
}
var测试=RegExp(i,“ig”);
var结果=新数组(horizLine.match(test));
如果(result.length>1){
警报(“失败”);
}
}
}
不确定你想用它做什么,但至少它不会给出任何错误。

如果你重写

for( i = 0; i <= (max - 1); i++ ) {
   for( j = 0; j <= (max - 1); j++) {

for(i=0;i感谢大家的帮助,firebug错误不再发生,因为代码是:

var testArray = new Array(
  ['7', '3', '9', '6', '4', '1', '5', '2', '8'],
  ['1', '8', '2', '7', '5', '3', '4', '6', '9'],
  ['9', '5', '7', '3', '8', '2', '1', '4', '6'],
  ['3', '1', '4', '9', '6', '7', '2', '8', '5'],
  ['5', '4', '6', '2', '9', '8', '3', '7', '1'],
  ['6', '2', '8', '5', '1', '4', '9', '3', '7'],
  ['8', '7', '1', '4', '3', '5', '6', '9', '2'],
  ['2', '9', '3', '1', '7', '6', '8', '5', '4'],
  ['2', '9', '3', '1', '7', '6', '8', '5', '4']
);

function checkYoSelf(myGrid) {
  var i;
  var j;
  var horizLine = new String;
  var max = myGrid.length;

  for( i = 0; i < max; i++ ) {
    for( j = 0; j < max; j++) {
      horizLine += myGrid[i][j];
    }
    var test = RegExp(i, "ig");
    var result = new Array(horizLine.match(test));
    if( result.length > 1 ) {
      alert("fail");
    }    
  }
}
var testArray=新阵列(
['7', '3', '9', '6', '4', '1', '5', '2', '8'],
['1', '8', '2', '7', '5', '3', '4', '6', '9'],
['9', '5', '7', '3', '8', '2', '1', '4', '6'],
['3', '1', '4', '9', '6', '7', '2', '8', '5'],
['5', '4', '6', '2', '9', '8', '3', '7', '1'],
['6', '2', '8', '5', '1', '4', '9', '3', '7'],
['8', '7', '1', '4', '3', '5', '6', '9', '2'],
['2', '9', '3', '1', '7', '6', '8', '5', '4'],
['2', '9', '3', '1', '7', '6', '8', '5', '4']
);
函数checkYoSelf(myGrid){
var i;
var j;
var horizLine=新字符串;
var max=myGrid.length;
对于(i=0;i1){
警报(“失败”);
}    
}
}

我想向您建议Ivar testArray = new Array( ['7', '3', '9', '6', '4', '1', '5', '2', '8'], ['1', '8', '2', '7', '5', '3', '4', '6', '9'], ['9', '5', '7', '3', '8', '2', '1', '4', '6'], ['3', '1', '4', '9', '6', '7', '2', '8', '5'], ['5', '4', '6', '2', '9', '8', '3', '7', '1'], ['6', '2', '8', '5', '1', '4', '9', '3', '7'], ['8', '7', '1', '4', '3', '5', '6', '9', '2'], ['2', '9', '3', '1', '7', '6', '8', '5', '4'], ['2', '9', '3', '1', '7', '6', '8', '5', '4'] ); function checkYoSelf(myGrid) { var i; var j; var horizLine = new String; var max = myGrid.length; for( i = 0; i < max; i++ ) { for( j = 0; j < max; j++) { horizLine += myGrid[i][j]; } var test = RegExp(i, "ig"); var result = new Array(horizLine.match(test)); if( result.length > 1 ) { alert("fail"); } } }