JavaScript 实现三段式版本号对比函数(app升级用)

这里提供 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)

补充说明

  1. 严格按 数字大小 对比,彻底规避字符串比较的坑;
  2. 不足三位的版本自动补 0(如 1.1 等同于 1.1.0);
  3. 适配你的版本序列:1.0.100 → 1.1.0 → 1.1.100 等所有场景。
相关推荐
星栈1 天前
pnpm 12 升级实测
前端·javascript
Ai-_Man1 天前
您您这可以把Microsofat Copilot的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。AI导出鸭
javascript·人工智能·ai·小程序·电脑·copilot
Bruce_Liuxiaowei1 天前
网页版 DeepSeek “harness desktop“ WebGL 上下文创建失败排查实录
开发语言·javascript·webgl
小凯在掘金2 天前
为什么箭头函数不能作为构造函数?
前端·javascript
可乐鸡翅yeah_2 天前
网页端 M3U8 播放器性能监控,怎么看播放卡顿指标
javascript·ffmpeg·音视频·safari·m3u8
可乐鸡翅yeah_2 天前
M3U8 防盗链 URL‑Token 签名,新手开发实操避坑
开发语言·javascript·ios·音视频·safari
2603_965896622 天前
JS原型与原型链|对象继承与实例底层原理
开发语言·javascript·原型模式
JustHappy2 天前
「vConsole MCP🛠️」我让 AI 直接看见任何 H5 的日志和请求帮你 debug
前端·javascript·程序员
xieter2 天前
【技术精选】Node.js 核心事件循环机制与异步 I/O 深度剖析 (2026-10-02)
前端·javascript
想吃火锅10052 天前
【leetcode】238.除了自身以外数组的乘积js
javascript·算法·leetcode