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

VB解密函数转JavaScript遇RangeError错误,求修复方法

修复VB转JavaScript的Decrypt函数错误

你的JavaScript版本有三个关键错误,导致了RangeError: Invalid string length以及功能失效:

  • 循环索引不匹配:VB的字符串索引是从1开始的,而JavaScript是0开始的。原循环从i=1开始且条件为i < s.length,会漏掉第一个字符,同时遍历范围完全不对。
  • 字符截取方法错误:VB的Mid(s, i, 1)是取第i个字符(长度1),但JavaScript的substring(start, end)参数是起始和结束索引,不是起始位置和长度。原代码里的s.substring(i, 1)会错误截取一段字符串而非单个字符。
  • 字符串拼接逻辑错误:total += total + tmp会让total的长度指数级增长(每次把当前total重复一遍再加新字符),很快就超出JavaScript字符串的最大长度限制,这正是RangeError的根源。正确的拼接应该和VB一致,只追加当前处理后的字符。

修正后的代码如下:

function decrypt(s) {
  let total = '';
  for (let i = 0; i < s.length; i++) {
    // 取当前索引的单个字符
    const tmpChar = s.charAt(i);
    // 转ASCII码减15,再转回字符
    const decryptedChar = String.fromCharCode(tmpChar.charCodeAt(0) - 15);
    // 追加到结果字符串
    total += decryptedChar;
  }
  return total;
}

如果处理长字符串,用数组拼接性能会更优:

function decrypt(s) {
  return Array.from(s).map(char => 
    String.fromCharCode(char.charCodeAt(0) - 15)
  ).join('');
}

这两个版本都完全对应原VB函数的逻辑:遍历每个字符,将其ASCII码减15后转回字符,最终拼接成解密后的字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:55:21