为什么这会给我一个错误?

时间:2013-11-04 00:49:08

标签: javascript variables error-handling variable-assignment

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

  

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/

2 个答案:

答案 0 :(得分:2)

该行:

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

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

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

这会使元素保持字符串,您仍然可以调用charCodeAt()方法。

答案 1 :(得分:1)

无法帮助它,我知道它并没有完全解决op的问题,但这里有一个很好的caesar实现(小提琴: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);