2013-11-04 180 views
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); 

柜面任何人感兴趣的是我的最终结果:http://jsfiddle.net/zackarylundquist/8L9b5/

+1

什么是你想在这里做'海峡[ i] = str [i] .charCodeAt()+ x;'? –

+1

charCodeAt(index)将获得字符串中指定索引处字符的ASCII码。 [链接](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/ –

相关问题