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

JavaScript中keyCode在if块外可正常打印 块内取数位返回undefined

问题原因

你生成的keyCode是Number数值类型,既不是字符串也不是数组,直接用[索引]写法访问数位拿到的永远是undefined,和代码写在if块内外没有关系:你在if块外只是打印了keyCode变量本身,没有尝试按下标取数位,所以看起来输出正常。

你日志里打印的unidentified是拼写偏差,实际拿到的就是undefined:可以直接在控制台执行const test = 69097; console.log(test[0])验证,输出就是undefined,数值和undefined做加法运算自然得到NaN。

修复方法

二选一即可:

  • 方法1(实现更简单):生成密钥时直接转成字符串,取数位时转回数字参与计算
    首先修改getKeyCode函数,同时补前导零避免随机数小于10000时密钥长度不足5位的问题:
    function getKeyCode() {
      keyCode = Math.floor(Math.random() * 100000).toString().padStart(5, '0')
      console.log(keyCode)
    };
    
    然后修改计算密文索引的逻辑,把取到的字符串数位转成数字:
    cMO1 = lTBC + Number(keyCode[lKIO])
    
  • 方法2:保留keyCode为数字类型,每次通过数学运算取对应数位的值,不需要做类型转换:
    // 取密钥从左到右第lKIO位的数值
    const currentKeyBit = Math.floor(keyCode / Math.pow(10, 4 - lKIO)) % 10
    cMO1 = lTBC + currentKeyBit
    
其他待修复的潜在问题
  • 越界判断逻辑错误:字母表数组abc长度为26,合法索引范围是0~25,判断条件应该写为if (cMO1 >= abc.length),现有逻辑用>会出现cMO1等于26时取不到对应字符的问题
  • 字符匹配逻辑鲁棒性差:当前逻辑只支持全小写字母,传入大写字母、数字、符号、空格时,lTBC会持续自增超出数组长度也匹配不到对应字符,直接进入死循环
  • 函数入参未生效:cypher函数声明了入参string,但内部实际读取的是全局变量message,后续传入其他待加密字符串时不会生效

内容的提问来源于stack exchange,提问作者oas333

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:31:15