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 相关文章推荐
采用CSS和JS,刚好我最近有个站点要用到下拉菜单!
Jun 26 Javascript
Mozilla 表达式 __noSuchMethod__
Apr 05 Javascript
JS获得URL超链接的参数值实例代码
Jun 21 Javascript
Jquery插件实现点击获取验证码后60秒内禁止重新获取
Mar 13 Javascript
Node.js的Express框架使用上手指南
Mar 12 Javascript
JavaScript 消息框效果【实现代码】
Apr 27 Javascript
JS 清除字符串数组中,重复元素的实现方法
May 24 Javascript
JS清除字符串中重复值的实现方法
Aug 03 Javascript
关于vue-router路径计算问题
May 10 Javascript
JS实现数组去重方法总结(六种方法)
Jul 14 Javascript
Vue传参一箩筐(页面、组件)
Apr 04 Javascript
Vue实现多页签组件
Jan 14 Vue.js
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
PHP中的Session对象如何使用
2015/09/25 PHP
JavaScript关于select的相关操作说明
2010/01/13 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
jWiard 基于JQuery的强大的向导控件介绍
2011/10/28 Javascript
jquery插件制作 手风琴Panel效果实现
2012/08/17 Javascript
6款新颖的jQuery和CSS3进度条插件推荐
2013/03/05 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
jquery+ajax实现注册实时验证实例详解
2015/12/08 Javascript
AngularJS中transclude用法详解
2016/11/03 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
2017/12/14 Javascript
浅析从vue源码看观察者模式
2018/01/29 Javascript
JS数组实现分类统计实例代码
2018/09/30 Javascript
使用Node.js实现一个多人游戏服务器引擎
2019/03/13 Javascript
[10:53]2018DOTA2国际邀请赛寻真——EG
2018/08/11 DOTA
[50:27]Secret vs VG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
使用Python标准库中的wave模块绘制乐谱的简单教程
2015/03/30 Python
Python爬虫工程师面试问题总结
2018/03/22 Python
详解Python的三种可变参数
2019/05/08 Python
Python 将json序列化后的字符串转换成字典(推荐)
2020/01/06 Python
python实现udp传输图片功能
2020/03/20 Python
如何基于Python Matplotlib实现网格动画
2020/07/20 Python
python 实现aes256加密
2020/11/27 Python
美国著名的婴儿学步鞋老品牌:Robeez
2016/08/20 全球购物
芬兰汽车配件商店:Autonvaraosat24
2017/01/30 全球购物
英国Flybe航空官网:欧洲最大的独立支线廉价航空公司
2019/07/15 全球购物
工商学院毕业生自荐信
2013/11/12 职场文书
师范毕业生个人求职信
2013/12/09 职场文书
大学生个人简历中的自我评价
2013/12/27 职场文书
学生鉴定评语大全
2014/05/05 职场文书
2014年学校教学工作总结
2014/12/06 职场文书
导师鉴定意见
2015/06/05 职场文书
花田少年史观后感
2015/06/16 职场文书
小学思品教学反思
2016/02/20 职场文书
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
2021/10/16 Python
Java代码规范与质量检测插件SonarLint的使用
2022/08/05 Java/Android