0

이 코드가 다음과 같은 오류 메시지를 표시하는 이유는 무엇입니까?왜 내게 오류가 발생합니까?

TypeError: Object 97 has no method 'charCodeAt'

var str = "Caesar Cipher"; 
str = str.split(""); 
num = 2; 
x = 0; 
for (var i = 0; i < str.length; i++) { 
    x = 0; 
    while (x < num) { 
     if (str[i].charCodeAt(0) <= 122 && str[i].charCodeAt(0) >= 97) { 
     str[i] = str[i].charCodeAt()+x; 
     } 
     x++; 
    } 
} 
console.log(str); 

Incase의 사람이 나의 최종 결과에 관심이 : http://jsfiddle.net/zackarylundquist/8L9b5/

+1

'STR의 [ i] = str [i] .charCodeAt() + x;'? –

+1

charCodeAt (index)는 문자열의 지정된 인덱스에있는 문자의 ASCII 코드를 가져옵니다. [link] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt). – Edper

답변

2

라인 :

str[i] = str[i].charCodeAt()+x; 

는 숫자로 문자열에서 배열의 요소를 변환한다. 숫자에 charCodeAt() 메소드가 없으므로 오류가 발생하는 이유는 무엇입니까? 다음 사용

str[i] = str[i].charCodeAt()+x + ""; 

이 요소를 문자열을 유지하는 것입니다, 당신은 여전히 ​​charCodeAt() 메소드를 호출 할 수 있습니다.

1

그것을 도울 수 없습니다, 나는 그것이 정확히 연산의 문제가 해결되지 않는 알지만, 여기 (바이올린 : http://jsfiddle.net/z97HR/3/) : 멋진 시저의 구현입니다 당신이 여기서 뭘하려고 무엇

var str = ("CaesarCipher").toLowerCase(); // let's use only lowercase letters, no spaces 
console.log(str); 

var offset = 0; 
var crypt = str.split("").map(function(letter){ 
    var offsetLetter = 97 + (letter.charCodeAt(0) + offset - 97) % 26; 
    return String.fromCharCode(offsetLetter); 
}).join("") 

console.log(crypt); 
+0

소문자 전용 암호는 불행히도 그것을 자르지 않지만 코드를 완성했습니다. http://jsfiddle.net/zackarylundquist/8L9b5/ –