SpiderMonkey引擎中JS字符串拼接失效问题及修复咨询
修复SpiderMonkey中HEX转ASCII的字符串拼接问题
问题场景
在SpiderMonkey JS引擎中运行HEX转ASCII代码时,字符串拼接出现异常:遍历HEX字符串拼接字符的逻辑在Nashorn引擎可正常执行,但在SpiderMonkey中,解析到不可打印ASCII字符后,后续字符无法正确追加到结果字符串中。
原代码
function hextoascii(str1) { var hex = str1.toString(); var str = ''; var substr = ''; var parsedInt = 0; for (var n = 0; n < hex.length; n += 2) { substr = hex.substr(n, 2); parsedInt = parseInt(substr, 16); str = '' + str.concat(String.fromCharCode(parsedInt)); log.info("n: " + n + " - parsedInt: " + parsedInt + " str: " + str); } return str; }
异常输出
n: 0 - parsedInt: 77 str: M n: 2 - parsedInt: 90 str: MZ n: 4 - parsedInt: 144 str: MZ n: 6 - parsedInt: 0 str: MZ n: 8 - parsedInt: 3 str: MZ
修复方案
问题出在字符串拼接的写法上:str = '' + str.concat(...)的冗余转换逻辑,在SpiderMonkey处理不可打印控制字符(如ASCII 144、0)时会触发兼容性问题。改用更通用的字符串拼接方式即可解决:
function hextoascii(str1) { var hex = str1.toString(); var str = ''; var substr = ''; var parsedInt = 0; for (var n = 0; n < hex.length; n += 2) { substr = hex.substr(n, 2); parsedInt = parseInt(substr, 16); // 改用+=运算符直接拼接,兼容所有JS引擎 str += String.fromCharCode(parsedInt); log.info("n: " + n + " - parsedInt: " + parsedInt + " str: " + str); } return str; }
补充说明
+=是JavaScript中最通用的字符串拼接方式,所有主流JS引擎对其实现逻辑保持一致,避免了不同引擎对concat方法处理特殊字符的差异。- 若坚持使用
concat,可去掉冗余的'' +强制转换,直接写成str = str.concat(String.fromCharCode(parsedInt));,同样能解决问题。
内容的提问来源于stack exchange,提问作者gunescelil
相关产品推荐
相关产品推荐

