Javascript字符串参数未定义,无法访问.length属性

时间:2018-04-27 21:18:44

标签: javascript string methods parameters

所以我正在开发freecodecamp挑战,我需要解码ceasar密码。我已经创建了一个辅助函数,它从main函数调用来解码字符串中的每个单词。我在那个二级代码中遇到问题,因为它不断给我一个错误,即设置为参数的字符串参数是未定义的,并且我无法访问长度。有人可以澄清一下发生了什么吗?

免责声明:我是新手编码,花了最后30分钟寻找这个问题的答案,我找不到。我觉得这个修复应该简单易行,如果有人发现这个问题多余,请提前道歉。

以下是代码:

function rot13(str) { // LBH QVQ VG!
  var stringArray = [];
  stringArray = str.split(" ");
  var value = stringArray.length;
  var decodedWords = [];
  var iCount = 0;

  while(iCount < value){
    decodedWords.push(decodeWord(stringArray[i]));
    iCount++;
  }

  return decodeWord("Confused!");

}

function decodeWord(word) {

    var decodedWord = "";

    for (i = 0; i < word.length; i++){

      var cipherVal = word.charCodeAt(i);
      var decodedVal = cipherVal;

      if( cipherVal >= 97 && cipherVal <= 109 || cipherVal >= 65 && cipherVal <= 77){
        decodedVal = cipherVal + 13;
      }

      else if(cipherVal >= 110 && cipherVal <= 122 || cipherVal >= 78 && 
 cipherVal <= 90){
        decodedVal = cipherVal - 13;
      }

      decodedWord += String.fromCharCode(decodedVal);
    }
    return decodedWord;
  }

感谢您的任何建议!非常赞赏。

2 个答案:

答案 0 :(得分:0)

在第一个函数中,循环内的i应为iCount

var iCount = 0;
while(iCount < value) {
    decodedWords.push(decodeWord(stringArray[iCount]));
    iCount++;
}

decodeWord函数抱怨word未定义,因为您通过未定义的索引(i)传递了stringArray的成员。如果您按定义的索引(iCount)抓取项目,decodeWord将收到已定义的word,并且能够抓住其长度。

当然,您可能还希望rot13返回输入字符串的编码版本,而不是编码版本的&#34; Confused!&#34;:

return decodedWords.join(" ");

答案 1 :(得分:0)

根据我的理解,你犯了一个错误 的 decodedWords.push(decodeWord(stringArray[i]));

将其更改为

<强> decodedWords.push(decodeWord(stringArray[iCount]));

希望它有效。如有任何问题,请告诉我