编写简单的代码行时发生意外错误

时间:2015-01-14 03:41:58

标签: javascript typeerror

这是一个将字符串转换为特定代码和其他代码的函数,将该代码解码为可读字符串,它们如下所示:(问题出现在decoder函数中)

 var hr = [['A','B','C','D','E','F','G','H','I','J'],
          ['a','b','c','d','e','f','g','h','i','j'],
          ['K','L','M','N','O','P','Q','R','S','T'],
          ['k','l','m','n','o','p','q','r','s','t'],
          ['U','V','W','X','Y','Z','0','1','2','3'],
          ['4','5','6','7','8','9','!','@','#','$'],
          ['%','^','&','*','(',')','-','=','_','+'],
          ['[',']','{','}',':',';',',','/','.','<'],
          ['>','?',' ','u','v','w','x','y','z']];



function coder(str){
    str = str.replace(/[ ]+/g,'');
    str = str.split('');// now str is an Array
    var code ='';

    for(var i=0;i<str.length;i++){ // now suppose i here is A
    //console.log(str[i])
        for(var j=0; j<hr.length;j++){
            for(var k=0;k<hr[j].length;k++){
                if(hr[j][k] === str[i]){
                    code = code+'#'+String(j)+'@'+String(k)+'~';
                }// end of if statement
            }// end of k loop
        }// end of j loop
    }// end of i loop

    return code;
};// end of coder function

function decoder(code){
    code = code.split('~');
    console.log(code);
    var str = '',x,y;
    for(var i=0;i<code.length;i++){
        code[i] = code[i].replace('#','');
        code[i] = code[i].split('@');
        code[i][0] = parseInt(code[i][0]);code[i][1] = parseInt(code[i][1])
    };// end of i loop
    console.log(code);

    for(var j=0;j<code.length;j++){ // now suppose j  is right now [1,2]
        x = code[j][0];
        y = code[j][1];
        str = str + hr[x][y];
        /*console.log(x);console.log(y);
        console.log(hr[x][y])*/
    };  
    return str;
}// end of decode function

问题出在decoder函数中。我没有看到任何可能引发javascript引擎抛出错误的东西,但事实是它抛出了一个错误。

问题&amp;错误

错误的名称是TypeError: Cannot read property 'NaN' of undefined。我没有在这里看到任何未定义的内容,只要NaN被说出来,然后定义了x和y。

你可以自己看看。
decoder(coder('sanmveg'))提供错误

调试&gt;思考&gt;混乱

我使用调试技术找出问题并发现错误在该行str=str+hr[x][y]中。所以NaN被称为xyundefined被称为hr,但所有这些都已定义

我不知道为什么这不起作用并且给我错误


这里的错误是什么?请提供一个可能的解释,以提高这篇文章的质量。
感谢您的贡献和回应

1 个答案:

答案 0 :(得分:1)

这对我来说很有用,但是还没有给它第二眼了解如何最好地清理它: http://jsfiddle.net/w5ozg373/3/

你有:

code = code.split('~');

添加:

// add this piece
if(code[code.length -1].trim().length == 0) {
    code.pop();   
}

当您使用拆分时,您获得的标记为空字符串。

也许这样清理它? :

code = code.filter(function(code_item) {
    return code_item.trim().length > 0; 
});

http://jsfiddle.net/w5ozg373/4/