Caesars密码在JavaScript中-为什么';A';变成';这里?

Caesars密码在JavaScript中-为什么';A';变成';这里?,javascript,encryption,caesar-cipher,rot13,Javascript,Encryption,Caesar Cipher,Rot13,我目前正在经历一个FreeCodeCamp挑战,它要求您创建一个ROT13密码(一个非常简单的密码,将每个字母转换为一个永无止境的字母表中的前13个字母)。我的代码如下: function rot13(str) { let lettersRegex = /[A-Z]/; let alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''); let charCodes = []; for(let i = 0; i < str.lengt

我目前正在经历一个FreeCodeCamp挑战,它要求您创建一个ROT13密码(一个非常简单的密码,将每个字母转换为一个永无止境的字母表中的前13个字母)。我的代码如下:

function rot13(str) {
  let lettersRegex = /[A-Z]/;
  let alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
  let charCodes = [];
  for(let i = 0; i < str.length; i++) {
    if(str.charAt(i).match(lettersRegex)) {
      charCodes.push(str.charCodeAt(i));
    } else {
      charCodes.push(str.charAt(i));
    }
  }
  let ret = '';
  console.log(`charCodes is currently ${charCodes}`);
  for(let i = 0; i < charCodes.length; i ++) {
    let temp = 0;
    if(lettersRegex.test(String.fromCharCode(charCodes[i]))) {
      if((alphabet.indexOf(String.fromCharCode(charCodes[i])) + 13) > alphabet.length) {
        temp = charCodes[i] + alphabet.indexOf(charCodes[i]) - 12;
      }
      else {
        temp = charCodes[i] + 13;
      }
      ret += String.fromCharCode(temp);
    } else {
      ret += charCodes[i];
    }
  }
  console.log(ret);
  return ret;
}
rot13("GUR DHVPX OEBJA SBK WHZCF BIRE GUR YNML QBT.");
//THE QUICK BROWN FOX JUMPS OVER THE L[ZY DOG.
函数rot13(str){
设lettersRegex=/[A-Z]/;
让字母表='ABCDEFGHIJKLMNOPQRSTUVWXYZ'。拆分('';
设charCodes=[];
for(设i=0;ialphabet.length){
temp=charCodes[i]+字母索引(charCodes[i])-12;
}
否则{
温度=字符代码[i]+13;
}
ret+=String.fromCharCode(temp);
}否则{
ret+=字符码[i];
}
}
控制台日志(ret);
返回ret;
}
rot13(“GUR DHVPX OEBJA SBK WHZCF BIRE GUR YNML QBT”);
//那只敏捷的棕色狐狸跳过了那条狗。
基本上,除了“A”外,每个字母都会在密码后转换为正确答案。是什么导致“A”在这个代码中变成“[”而不是“N”


如果您对我的代码有任何评论或建议,我们将不胜感激。

这是一个简单的修复方法,将
更改为
=
不要忘记数组是零索引的。
如果((alphabet.indexOf(String.fromCharCode(charCodes[i]))+13)>=alphabet.length)
这是一个简单的修复方法,将
更改为
=
不要忘记数组是零索引的。
if((alphabet.indexOf(String.fromCharCode(charCodes[i]))+13)>=alphabet.length)

我注意到的第一件事是字符
'['
'Z'+1
,但我会看看是否能找出导致indexof是零基的原因,所以
+13)>字母表。length
必须是
+13)>=alphabet.length
+13)>alphabet.length-1
@kaido,看起来你在我输入答案时就知道了!我发现了同样的问题,然后我注意到的第一件事是字符
['
'Z'+1
,但我会看看是否能找出导致indexof是零基的原因,所以
+13)>字母表。length
必须是
+13)>=alphabet.length
+13)>alphabet.length-1
@kaido,看起来你在我输入答案时就知道了!我发现了同样的问题,然后它似乎可以解决这个问题