0

为什么此代码给我以下错误消息?

TypeError:对象 97 没有方法 '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);

万一有人对我的最终结果感兴趣:http: //jsfiddle.net/zackarylundquist/8L9b5/

4

2 回答 2

2

该行:

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

将数组中的元素从字符串转换为数字。数字没有charCodeAt()方法,因此您会收到错误消息。使用以下内容:

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

这将使元素保持为字符串,并且您仍然可以调用该charCodeAt()方法。

于 2013-11-04T00:58:06.950 回答
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);
于 2013-11-04T01:15:48.900 回答