You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript实现凯撒密码代码无报错但不终止、运行异常

凯撒密码解码器代码问题修复

你的代码存在2个核心错误,导致无法输出正确结果:

  • 存在低级笔误:循环终止条件里写的是word.legth,字符串长度的正确属性名是word.length,漏写了字母n。访问不存在的对象属性会返回undefined,和数字比较时undefined会被转为NaN,所有和NaN的比较结果均为false,循环逻辑直接失效。
  • 区间判断写法错误:JavaScript不支持a <= b <= c形式的连续比较。该写法会先计算左侧a <= b得到布尔值true或false,再将布尔值转为数字(true转1,false转0)后和右侧的c比较,永远无法实现判断字符编码落在指定区间的效果,所有字符都会被错误归类到大写字母分支,偏移计算完全错误。

修复后可正常运行的代码

let word = "привет";
let shift = 3;
let result = "";
// 修正length拼写错误
for (let i = 0; i < word.length; i++){
    const charCode = word[i].charCodeAt(0);
    // 用逻辑与&&连接两个判断条件,实现区间校验
    if ('А'.charCodeAt(0) <= charCode && charCode <= 'Я'.charCodeAt(0)) {
        let newChar = ((charCode + shift - 'А'.charCodeAt(0)) % 32) + 'А'.charCodeAt(0)
        result += String.fromCharCode(newChar);
    }
    else if ('а'.charCodeAt(0) <= charCode && charCode <= 'я'.charCodeAt(0)) {
        let newChar = ((charCode + shift - 'а'.charCodeAt(0)) % 32) + 'а'.charCodeAt(0)
        result += String.fromCharCode(newChar);
    }
    else {
        result += word[i];
    }
}
console.log(result)

运行上述代码,输入привет、偏移3时会正确输出тулезх。如果需要支持字母ё/Ё的偏移,额外加分支单独判断这两个字符的编码即可。


内容的提问来源于stack exchange,提问作者make-me-fly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 02:36:51