用javascript比较语义化版本号

移动端APP第三方开发中经常会碰到一些因为版本不同而造成JS SDK或JS API差异或支持的问题。对于移动前端来说,在实际第三方开发中可能会需要根据APP的版本号做一些特殊的业务逻辑处理。

语义化版本号

一般语义化版本号通常定义是这样的:

Major_Version_Number.Minor_Version_Number[.Revision_Number[.Build_Number]]
 
主版本号            .子版本号              [.修正版本号       [.编译版本号  ]]
定界符一般使用.

语义化版本号比较方法

这样我们可以做版本号比较,这里提供一个粗陋的方法:

/**
 * 版本比较 VersionCompare
 * @param {String} currVer 当前版本.
 * @param {String} promoteVer 比较版本.
 * @return {Boolean} false 当前版本小于比较版本返回 true.
 *
 * 使用
 * VersionCompare("6.3","5.2.5"); // false.
 * VersionCompare("6.1", "6.1"); // false.
 * VersionCompare("6.1.5", "6.2"); // true.
 */
var VersionCompare = function (currVer, promoteVer) {
    currVer = currVer || "0.0.0";
    promoteVer = promoteVer || "0.0.0";
    if (currVer == promoteVer) return false;
    var currVerArr = currVer.split(".");
    var promoteVerArr = promoteVer.split(".");
    var len = Math.max(currVerArr.length, promoteVerArr.length);
    for (var i = 0; i < len; i++) {
        var proVal = ~~promoteVerArr[i],
            curVal = ~~currVerArr[i];
        if (proVal < curVal) {
            return false;
        } else if (proVal > curVal) {
            return true;
        }
    }
    return false;
};

使用也很简单:

VersionCompare("6.3","5.2.5"); // false.
VersionCompare("6.1", "6.1"); // false.
VersionCompare("6.1.5", "6.2"); // true.
这里需要注意的是根据我自己的业务逻辑当前版本小于比较版本返回 true。你可以根据自己的业务逻辑修改代码。

比如我们要获取微信的版本号,可以这样写:

var wechatInfo = navigator.userAgent.match(/MicroMessenger\/([\d\.]+)/i);
var currVer = wechatInfo[1];
if (VersionCompare(currVer, "6.2.5")) {
    //你的业务逻辑
}

注意:

时间仓促,这个方法仅仅作为普通的常用方法,没有提供只比较主版本或子版本的方法,而是比较最终的整个版本号。

时间: 2024-10-22 15:16:32

用javascript比较语义化版本号的相关文章

javascript比较语义化版本号的实现代码_javascript技巧

前言 所谓"语义化版本号",就是在版本号中体现出语义,或者说版本号本身是有意义的,不再是随意给的一个数字.这个规范将版本号中每个数字的意义都做了比较严格的说明.当然,其中大部分内容还是沿用我们之前说过的业内的约定,所以,对于有版本号意识的开发者来说,接受这个规范是很容易的. 在移动端APP第三方开发中经常会碰到一些因为版本不同而造成JS SDK或JS API差异或支持的问题.对于移动前端来说,在实际第三方开发中可能会需要根据APP的版本号做一些特殊的业务逻辑处理. 语义化版本号 一般语

Angular 2最终版发布,采用语义化版本号

Angular 2终于结束了看似无尽的开发阶段,发布了最终版. Angular 2第一个发布候选版本(RC:Release Candidate)是在2016年3月公布的,之后就在持续使之变得更稳定.完整.在博客中,Jules Kremer指出该最终版本的意义: "最终"意味着什么?意味着框架稳定性已经在广泛的用户案例中得到验证,框架已优化了开发人员效率.加载大小以及性能.同时拥有预编译(ahead-of-time compilation)和内置的懒加载,我们已经可以确保用户在各个浏览器

《JavaScript开发框架权威指南》——1.5 语义化版本控制

1.5 语义化版本控制 如果安装了jQuery(见清单),那么请查看项目的Bower清单.你所看到的应当与清单相仿. 清单1-7 语义化版本号 "dependencies": { "jquery": "~2.1.3" } 清单中的版本号2.1.3(请暂时忽略-)就是所谓的语义化版本号(Semver,Semantic Version).语义化版本控制能够帮助开发者按照通用格式为其项目指定版本号.该格式如下所示. Version X.Y.Z(Majo

语义化的软件版本号规则,你是否真的了解软件的版本号

每次打开谷歌浏览器的About页面更新的时候,总是期待着一个新版本的到来,新的东西总是让人感到Amazing.这样久了之后心中不免产生一个疑问,什么时候该发布一个新版本了,有什么规律么?平时的小更新总是版本号后面无关仅要的数字的增长,当这个数字增长到何时可以让主版本号加1? 带着这个疑惑到StackOverflow造访了一下,良久无回音.再加上自己写点小东西时也需要正确地命名版本号来管理发布,看来是有必要补充一下这方面的知识了. 语义化版本号 当我在发布jQuery插件时,发现其官方页面上提供了

CSS命名的语义化和html5为语义和体验而生

文章简介:html5–为语义和体验而生. 开篇前的一些YY 曾几何时,一个人出设计稿,出完设计稿打开DW用拖出一个页面,再苦逼一点拖完页面后自己还要写后台,武林人称:美工.更苦逼的是当每一次需求变更后,去修改一大堆发麻的 ,于是"div+css"被搬上了互联网时代的舞台,一夜间N多的<DIV+CSS>葵花宝典横空出世,那时,我们活在了div+css的年代,那时,我们用上了 之后,腰不酸,腿不痛,加班也带劲了. YY结束,切入正题 Ghost曾在2年前就以<页面重构中的

如何让你的JavaScript代码更加语义化

如何让你的JavaScript代码更加语义化 语义化这个词在 HTML 中用的比较多,即根据内容的结构化选择合适的标签.其作用不容小觑: 赋予标签含义,让代码结构更加清晰,虽然我们可以在标签上添加 class 来标识,但这种通过属性来表示本体的形式会显得不够直接,而且在一定程度上也有冗余. 优化搜索引擎(SEO),结构良好的网页对搜索引擎的亲和力是很高的,百度和 google 也给出了很多网页结构化的建议(规范),方便他们抓取网页. 利于设备解析,如盲人阅读器对页面的分析,目前淘宝很多网页都是支

智能选择器和语义化的CSS

"结构永远服从于功能,这是不变的法则",建筑工程师"摩天大楼之父"Louis Sullivan如是说.因为工程师不希望让无辜的人们被碾压在巨大的建筑物下,这种大拇指式的规则是相当有用的.在设计中你应该总是以功能为重,然后让结构在结果中呈现.如果你以结构为重,虽然这能够建造出一栋漂亮的摩天大楼,但代价是埋下了许多相当危险的种子. 这些都是关于建筑师的,那么对前端架构师或者"非真正的架构师"来说呢?我们需要遵守这个法则还是忽略它? 随着面向对象的CS

如何理解语义化的html结构

HTML结构是页面的骨架,一个页面就好像一幢房子,HTML结构就是钢精钢筋混泥土的墙,一幢房子如果没有钢精钢筋混泥土的墙那就是一堆费砖头,不能住人,不能办公. 相信大家都知道html和css,知道html结构和css表现分离,知道html语义化,这些都是这几年的热门关键字.语义化的html在国内也是一两年前才开始被追捧的,看看现在群里谈论的html结构,关于html结构的面试题,语义化的html占据了很大一部分.那么为什么要使用语义化的HTML?语义化的HTML到底有什么好处呢? HTML是提供

语义化的CSS:聪明的选择器语义化CSS

文章简介:结合智能选择器的语义化的CSS. "结构永远服从于功能,这是不变的法则",建筑工程师"摩天大楼之父"Louis Sullivan如是说.因为工程师不希望让无辜的人们被碾压在巨大的建筑物下,这种大拇指式的规则是相当有用的.在设计中你应该总是以功能为重,然后让结构在结果中呈现.如果你以结构为重,虽然这能够建造出一栋漂亮的摩天大楼,但代价是埋下了许多相当危险的种子. 这些都是关于建筑师的,那么对前端架构师或者"非真正的架构师"来说呢?我们需要