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的兼容各种浏览器的iframe自适应高度的脚本
Aug 13 Javascript
js 关于=+与+=日期函数使用说明(赋值运算符)
Nov 15 Javascript
js中的数组Array定义与sort方法使用示例
Aug 29 Javascript
javascript上传图片前预览图片兼容大多数浏览器
Oct 25 Javascript
JS测试显示屏分辨率以及屏幕尺寸的方法
Nov 22 Javascript
屏蔽相应键盘按钮操作
Mar 10 Javascript
JS实现窗口加载时模拟鼠标移动的方法
Jun 03 Javascript
javascript实现3D切换焦点图
Oct 16 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
Dec 11 Javascript
jQuery学习笔记之入门
Dec 14 Javascript
vue2 自定义动态组件所遇到的问题
Jun 08 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
May 22 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
PHP 获取客户端真实IP地址多种方法小结
2010/05/15 PHP
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
2014/10/21 PHP
php跨服务器访问方法小结
2015/05/12 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
基于jquery的direction图片渐变动画效果
2010/05/24 Javascript
JQuery循环滚动图片代码
2011/12/08 Javascript
关于JS判断图片是否加载完成且获取图片宽度的方法
2013/04/09 Javascript
jQuery表格插件ParamQuery简单使用方法示例
2013/12/05 Javascript
jquery遍历select元素(实例讲解)
2013/12/31 Javascript
JavaScript将Web页面内容导出到Word及Excel的方法
2015/02/13 Javascript
JS+CSS实现感应鼠标渐变显示DIV层的方法
2015/02/20 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
2016/02/05 Javascript
Angularjs处理页面闪烁的解决方法
2017/03/09 Javascript
微信小程序实现简易table表格
2020/06/19 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
2019/06/19 Javascript
[03:42]2014DOTA2西雅图国际邀请赛7月9日TOPPLAY
2014/07/09 DOTA
在Python的web框架中编写创建日志的程序的教程
2015/04/30 Python
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
Python探索之修改Python搜索路径
2017/10/25 Python
Python爬取十篇新闻统计TF-IDF
2018/01/03 Python
django2.0扩展用户字段示例
2019/02/13 Python
python多线程调用exit无法退出的解决方法
2019/02/18 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
Diamondback自行车:拥有你的冒险
2019/04/22 全球购物
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
澳大利亚电商Catch新西兰站:Catch.co.nz
2020/05/30 全球购物
J2EE中的容器都包括哪些
2013/08/21 面试题
茶叶店创业计划书范文
2014/01/19 职场文书
揠苗助长教学反思
2014/02/04 职场文书
教师产假请假条范文
2014/04/10 职场文书
汉语言文学专业求职信
2014/06/19 职场文书
酒店总经理岗位职责范本
2014/08/08 职场文书
关于读书的演讲稿400字
2014/08/27 职场文书
民间借贷纠纷答辩状
2015/08/03 职场文书
创业分两种人:那么哪些适合创业?,哪些适合不适合创业呢?
2019/08/23 职场文书
win11无法添加打印机怎么办? 提示windows无法打开添加打印机的解决办法
2022/04/05 数码科技