【问题标题】:Why is this giving me an error?为什么这会给我一个错误?
【发布时间】:2013-11-14 14:54:42
【问题描述】:

为什么这段代码会给我以下错误信息?

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/

【问题讨论】:

  • 你想在这里做什么str[i] = str[i].charCodeAt()+x;
  • charCodeAt(index) 将获取字符串中指定索引处字符的 ASCII 码。 link.

标签: javascript variables error-handling variable-assignment


【解决方案1】:

行:

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

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

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

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

【讨论】:

    【解决方案2】:

    没办法,我知道它不能完全解决 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);
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多