未捕获的RangeError:在JavaScript中附加到字符串时无效的字符串长度

时间:2015-03-08 01:19:58

标签: javascript html5

所以基本上我一直在使用Javascript开发我的一个小型个人项目,而且我遇到了麻烦。我试图使用Javascript从2D数组生成HTML列表。这是我的代码:

function generatePageFromArray(page, array){
var entry, i, j;
for (i = 0; i < array.length; ++i) {
    entry = array[i];
    for (j = 0; j < entry.length; j = j + 2) {
        page = page + '<tr>'+
                    '<td class="favoritesContainer"><input type="checkbox" class="favorites"></input></td>';
        page = page +  '<td class="english">' + entry[j,0] + '</td>';
        page = page +  '<td class="spanish">';
        if (entry[j,1].indexOf("|") > 0){
            var spanishTerms = entry[j,1].split("|");
            var strLength = spanishTerms.size;
            for (i = 0; i < strLength; i++){
                page = page.concat(spanishTerms[i] + '<br>');   
            }
        }
        else{
            page = page + entry[j,1];
        }
        page = page + '</td>'
        page = page + '</tr>';         
    }
}
return page;}

它不断抛出一个未捕获的RangeError:此行上的字符串长度无效:

page = page + '<tr>'+
                    '<td class="favoritesContainer"><input type="checkbox" class="favorites"></input></td>';

我不知道为什么。我也试过使用.concat()来追加,但没有。

3 个答案:

答案 0 :(得分:10)

您的二维数组访问不正确,但主要问题是您在内循环中重新使用变量i

for (i = 0; i < strLength; i++){
    page = page.concat(spanishTerms[i] + '<br>');   
}

i与您的外部循环中的i相同。因此,您收到的错误告诉您,您正在构建超出运行时系统容量的大量字符串。为该循环声明一个新变量。

从数组数组中访问值需要两组[ ]

entry[j][0]

答案 1 :(得分:1)

RangeError: Invalid string length的另一个来源是以下示例(尝试自己查找错误,这是读者的一项任务):

var urls = "http://example.org/1";
var url = "http://example.org/2";
for(var i=0;i<100;i++) {
    urls += urls + url + "\r\n"; //on this line, the exception is thrown
}

答案 2 :(得分:0)

我收到了这个错误:

未捕获RangeError:字符串长度无效

通过使用i for outer for循环修复它,使用DIFFERENT j for inner for loop。

我有外循环使用i,内循环仍然与i, 然后上面的错误,花了我很多时间来弄清楚真正的问题是2 i的冲突,

for (var i = 0; i < features.length; i++) {
   for (var i = 0; i < features.length; i++) {
      i;// conflict i will cause error above
   }
}

您必须使用j或不同的字母进行内循环