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


Posted in Javascript onSeptember 09, 2016

前言

所谓“语义化版本号”,就是在版本号中体现出语义,或者说版本号本身是有意义的,不再是随意给的一个数字。这个规范将版本号中每个数字的意义都做了比较严格的说明。当然,其中大部分内容还是沿用我们之前说过的业内的约定,所以,对于有版本号意识的开发者来说,接受这个规范是很容易的。

在移动端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")) {
 //你的业务逻辑
}

注意:

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

总结

以上就是这篇文章的全部内容了,希望对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
Jan 24 Javascript
JavaScript常用的弹出广告及背投广告实现方法
Feb 06 Javascript
JavaScript的类型、值和变量小结
Jul 09 Javascript
基于jQuery实现音乐播放试听列表
Apr 14 Javascript
js 模仿锚点定位的实现方法
Nov 19 Javascript
JavaScript手风琴页面制作
May 17 Javascript
javascript 取小数点后几位几种方法总结
Aug 02 Javascript
详解JS转换数值函数Number()、parseInt()、parseFloat()
Aug 24 Javascript
ES6基础之解构赋值(destructuring assignment)
Feb 21 Javascript
Vue CLI3中使用compass normalize的方法
May 30 Javascript
vue 自动化路由实现代码
Sep 03 Javascript
JavaScript监听触摸事件代码实例
Dec 30 Javascript
js防阻塞加载的实现方法
Sep 09 #Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
Sep 09 #Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
Sep 09 #Javascript
Vuejs第十三篇之组件——杂项
Sep 09 #Javascript
jQuery属性选择器用法示例
Sep 09 #Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
Sep 09 #Javascript
vuejs动态组件给子组件传递数据的方法详解
Sep 09 #Javascript
You might like
Zend Framework中的简单工厂模式 图文
2012/07/10 PHP
Yii操作数据库的3种方法
2014/03/11 PHP
PHP实现生成唯一编号(36进制的不重复编号)
2014/07/01 PHP
php利用递归实现删除文件目录的方法
2016/09/23 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
2017/05/30 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
比较简单的一个符合web标准的JS调用flash方法
2007/11/29 Javascript
JavaScript中使用ActiveXObject操作本地文件夹的方法
2014/03/28 Javascript
深入理解关于javascript中apply()和call()方法的区别
2016/04/12 Javascript
第五章之BootStrap 栅格系统
2016/04/25 Javascript
全面解析Bootstrap中transition、affix的使用方法
2016/05/30 Javascript
原生js实现节日时间倒计时功能
2017/01/18 Javascript
JavaScript 巧学巧用
2017/05/23 Javascript
JavaScript贪吃蛇小组件实例代码
2017/08/20 Javascript
详解angularjs popup-table 弹出框表格指令
2017/09/20 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
python魔法方法-属性访问控制详解
2016/07/25 Python
python 自动化将markdown文件转成html文件的方法
2016/09/23 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
Python3操作MongoDB增册改查等方法详解
2020/02/10 Python
python获取整个网页源码的方法
2020/08/03 Python
CSS3字体效果的设置方法小结
2016/06/13 HTML / CSS
微软俄罗斯官方网站:Microsoft俄罗斯
2016/09/18 全球购物
Intersport西班牙:在线体育商店
2019/11/06 全球购物
学生会竞选自荐信
2013/10/12 职场文书
思想汇报格式
2014/01/05 职场文书
酒吧创业计划书
2014/01/18 职场文书
乱丢垃圾袋检讨书
2014/10/08 职场文书
沈阳故宫导游词
2015/01/31 职场文书
事业单位个人总结
2015/02/12 职场文书
女儿满月酒致辞
2015/07/29 职场文书
员工旷工检讨书
2015/08/15 职场文书
php中配置文件保存修改操作 如config.php文件的读取修改等操作
2021/05/12 PHP