这里提供 JavaScript 实现三段式版本号对比函数,按 主版本.次版本.修订号 逐位数字比较,兼容 1.0.100、1.1.0 这类版本,可直接用于本地版本判断。
完整工具函数
javascript
/**
* 对比两个三段式版本号
* @param {string} v1 版本1
* @param {string} v2 版本2
* @returns {number}
* 1 : v1 > v2(当前版本更新)
* -1 : v1 < v2(需要升级)
* 0 : 版本相等
*/
function compareVersion(v1, v2) {
// 分割并转为数字数组
const arr1 = v1.split('.').map(Number);
const arr2 = v2.split('.').map(Number);
// 逐段比较:主版本 → 次版本 → 修订号
for (let i = 0; i < 3; i++) {
const num1 = arr1[i] || 0;
const num2 = arr2[i] || 0;
if (num1 > num2) return 1;
if (num1 < num2) return -1;
}
// 三段全部相等
return 0;
}
使用示例
javascript
// 测试用例
console.log(compareVersion('1.0.100', '1.1.0')); // -1 1.0.100 < 1.1.0
console.log(compareVersion('1.1.0', '1.0.100')); // 1 1.1.0 > 1.0.100
console.log(compareVersion('1.1.99', '1.1.100'));// -1
console.log(compareVersion('1.1.100', '1.1.100'));// 0
// 业务场景:判断是否需要更新
const localVer = '1.0.100';
const serverVer = '1.1.0';
const res = compareVersion(localVer, serverVer);
if (res === -1) {
console.log('检测到新版本,请升级');
} else if (res === 1) {
console.log('本地版本更高');
} else {
console.log('版本一致,无需更新');
}
PHP 版本(后端/ThinkPHP 场景备用)
php
/**
* 三段版本号对比
* @param string $v1
* @param string $v2
* @return int 1/-1/0
*/
function compareVersion($v1, $v2)
{
$arr1 = array_map('intval', explode('.', $v1));
$arr2 = array_map('intval', explode('.', $v2));
for ($i = 0; $i < 3; $i++) {
$n1 = isset($arr1[$i]) ? $arr1[$i] : 0;
$n2 = isset($arr2[$i]) ? $arr2[$i] : 0;
if ($n1 > $n2) return 1;
if ($n1 < $n2) return -1;
}
return 0;
}
// 调用示例
var_dump(compareVersion('1.0.100', '1.1.0')); // int(-1)
补充说明
- 严格按 数字大小 对比,彻底规避字符串比较的坑;
- 不足三位的版本自动补
0(如1.1等同于1.1.0); - 适配你的版本序列:
1.0.100→1.1.0→1.1.100等所有场景。