如何比较版本号
前端代码需要运行在客户的浏览器中,但是有些版本的浏览器不支持某些特性,所以我们需要比较浏览器的版本号,然后根据版本号来决定是否使用某些特性。这里就涉及到版本号的比较问题。
# 版本号定义
版本号一般是由三个数字组成,分别是主版本号、次版本号和修订版本号。比如 1.2.3
,其中 1
是主版本号,2
是次版本号,3
是修订版本号。版本号的比较是从左到右依次比较,如果左边的数字相等,再比较右边的数字。但是版本号有些只有两个数字,比如 1.2
,这时候我们可以认为修订版本号是 0,所以 1.2
等价于 1.2.0
。
# 两个版本号比较
这里我们需要把版本号转换成数组,然后比较两个数组的大小。如果两个数组的长度不一样,我们可以认为长度短的数组后面都是 0。
const compareVersions = (v1: number[], v2: number[]): number => {
for (let i = 0; i < Math.max(v1.length, v2.length); i++) {
const num1 = v1[i] || 0;
const num2 = v2[i] || 0;
if (num1 > num2) return 1;
if (num1 < num2) return -1;
}
return 0;
};
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
如果我们需要判断版本号是否在某个范围内,我们可以这样写:
const isVersionInRange = (
version: number[],
min: number[],
max: number[]
): boolean => {
return (
compareVersions(version, min) >= 0 && compareVersions(version, max) <= 0
);
};
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 总结
版本号比较虽然看起来简单,但是在实现过程中还是需要考虑各种情况,例如版本号的长度不一样,版本号的范围判断等。