背景
最近排查一个bug,安卓手机一个按钮不展示,但是ios手机没有影响。经过排查代码才发现,这个按钮展示是根据后端返回的字段以及一个版本号来进行判断的。同一个账号,在安卓手机和ios手机返回的字段不一样这显然是不现实的,所以很显然,是由于版本号导致的这个错误。在看了一下逻辑,原来当时是在某个版本之后,才有这个按钮,所以有一个版本判断。现在中间已经差了起码5个大版本,可以说最基础的版本覆盖率肯定100%了。现在进入正题吧
观察如下:
具体为啥第二个会为false,我猜测是因为隐式转换的时候,3.10.1转化成了3.1吧
但是具体不是很确定是否是这个原因,望大家指明~~~
解决办法:
下面是我查询一些博客找到的解决办法:
也是兼容性比较好~ 可参考~
**
* 版本号判断
* @param {*} preVersion
* @param {*} lastVersion
* @returns
*/
export const versionStringCompare = (preVersion='', lastVersion='') => {
var pre = preVersion.split('.');
var last = lastVersion.split('.');
var maxL = Math.max(pre.length, last.length);
var result = 0;
for (let i = 0; i < maxL; i++) {
let preValue = pre.length>i ? pre[i]:0;
let preNum = isNaN(Number(preValue)) ? preValue.charCodeAt() : Number(preValue);
let lastValue = last.length>i ? last[i]:0;
let lastNum = isNaN(Number(lastValue)) ? lastValue.charCodeAt() : Number(lastValue);
if (preNum < lastNum) {
result = false;
break;
} else if (preNum > lastNum) {
result = true;
break;
}
}
return result;
}
versionStringCompare('3.10.1','3.5.0'); // true