为什么此代码会给我以下错误消息?
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/
答案 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);