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
相关产品推荐
相关产品推荐

