在Android WebView环境中,JavaScript的parseInt函数会将以0开头的字符串错误地转换为0,导致计算结果异常。本文分析该兼容性问题,并提供一种通过正则表达式去除前导零的自定义str2Int方法,确保数字转换的准确性。
Android WebView中parseInt兼容性问题分析
今日遭遇一难题:某页面在浏览器(含手机与PC)中运行正常,但通过WebView加载时出现异常,涉及两个数值计算结果始终错误。经alert调试发现,WebView中显示的结果与浏览器端存在显著差异,原本应为正数的值竟变为负数。深入比对后发现,部分数字被意外截断,这些数字均源自字符串经parseInt转换而来。值得注意的是,被截断的值与其他正常数值的主要区别在于前者以0开头(如“04903”),而后者无此特征(如“90874”)。由此可推断,WebView内置的JavaScript引擎中,parseInt函数将带有前导0的字符串错误地解析为0。既然问题根源已明,解决方案便相对简单:自定义一个str2Int方法以替代parseInt即可。
自定义str2Int函数实现方案
针对此问题,可以编写一个自定义函数str2Int来替代parseInt。该函数首先利用正则表达式移除字符串前导的0,然后对处理后的字符串进行转换。若移除前导零后字符串为空,则返回0;否则调用parseInt进行标准转换。
str2Int:function(str){
str = str.replace(/^0+/g, '');
if(str.length == 0){
return 0;
}
return parseInt(str);
}