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 相关文章推荐
checkbox 多选框 联动实现代码
Oct 22 Javascript
input、button的不同type值在ajax提交表单时导致的陷阱
Feb 24 Javascript
自己写了一个展开和收起的多更能型的js效果
Mar 05 Javascript
解决jquery1.9不支持browser对象的问题
Nov 13 Javascript
javascript验证身份证完全方法具体实现
Nov 18 Javascript
利用jquery写的左右轮播图特效
Feb 12 Javascript
浅析JQuery中的html(),text(),val()区别
Sep 01 Javascript
node.js中的fs.readlink方法使用说明
Dec 17 Javascript
jQuery多个input求和的实现方法
Feb 12 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
Jan 04 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
Nov 21 Javascript
微信小程序实现滑动操作代码
Apr 23 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
smarty 原来也不过如此~~呵呵
2006/11/25 PHP
调整优化您的LAMP应用程序的5种简单方法
2011/06/26 PHP
用php实现选择排序的解决方法
2013/05/04 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
2015/10/20 PHP
php实现查询功能(数据访问)
2017/05/23 PHP
PHP使用反向Ajax技术实现在线客服系统详解
2019/07/01 PHP
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
JavaScript自定义等待wait函数实例分析
2015/03/23 Javascript
jquery+php实现滚动的数字特效
2015/11/29 Javascript
jQuery实现的文字hover颜色渐变效果实例
2016/02/20 Javascript
Javascript农历与公历相互转换的简单实例
2016/10/09 Javascript
浅析JavaScript中的特殊数据类型
2017/12/15 Javascript
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
[01:38]女王驾到——至宝魔廷新尊技能&特效展示
2020/06/16 DOTA
Python中列表(list)操作方法汇总
2014/08/18 Python
flask框架中勾子函数的使用详解
2018/08/01 Python
Django Admin中增加导出CSV功能过程解析
2019/09/04 Python
django创建超级用户过程解析
2019/09/18 Python
Python Socketserver实现FTP文件上传下载代码实例
2020/03/27 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
2020/04/26 Python
TensorFlow中如何确定张量的形状实例
2020/06/23 Python
Python sqlalchemy时间戳及密码管理实现代码详解
2020/08/01 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
python和opencv构建运动检测器的实现
2021/03/03 Python
CSS3 Backgrounds属性相关介绍
2011/05/11 HTML / CSS
利用CSS3实现单选框动画特效示例代码
2016/09/26 HTML / CSS
药学专业个人的自我评价
2013/12/31 职场文书
企业总经理任命书
2014/06/05 职场文书
质量安全标语
2014/06/07 职场文书
校庆团日活动总结
2014/08/28 职场文书
领导班子三严三实对照检查材料
2014/09/25 职场文书
2014学习十八届四中全会精神思想汇报范文
2014/10/23 职场文书
社区端午节活动总结
2015/02/11 职场文书
MySQL 表空间碎片的概念及相关问题解决
2021/05/07 MySQL
Django实现drf搜索过滤和排序过滤
2021/06/21 Python