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 相关文章推荐
JavaScript Archive Network 集合
May 12 Javascript
纯javascript模仿微信打飞机小游戏
Aug 20 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
Jan 25 Javascript
Javascript的表单验证-初识正则表达式
Mar 18 Javascript
js实现自动图片轮播代码
Mar 22 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
Apr 13 Javascript
解决低版本的浏览器不支持es6的import问题
Mar 09 Javascript
js代码规范之Eslint安装与配置详解
Sep 08 Javascript
vue发送ajax请求详解
Oct 09 Javascript
javascript+HTML5 canvas绘制时钟功能示例
May 15 Javascript
js模拟F11页面全屏显示
Sep 17 Javascript
vue实现在线学生录入系统
May 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
编写PHP的安全策略
2006/10/09 PHP
php session和cookie使用说明
2010/04/07 PHP
PHP使用range协议实现输出文件断点续传代码实例
2014/07/04 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
yii通过小物件生成view的方法
2016/10/08 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
2017/02/15 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
2017/05/20 PHP
全面解析PHP面向对象的三大特征
2017/06/10 PHP
浅谈laravel aliases别名的原理
2019/10/24 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
php7 参数、整形及字符串处理机制修改实例分析
2020/05/25 PHP
js下通过prototype扩展实现indexOf的代码
2010/12/08 Javascript
网页加载时页面显示进度条加载完成之后显示网页内容
2012/12/23 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
java必学必会之static关键字
2015/12/03 Javascript
微信小程序实现的一键拨号功能示例
2019/04/24 Javascript
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
小程序input数据双向绑定实现方法
2019/10/17 Javascript
js实现批量删除功能
2020/08/27 Javascript
[50:17]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python机器学习理论与实战(二)决策树
2018/01/19 Python
Django 跨域请求处理的示例代码
2018/05/02 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
2018/10/14 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
2019/02/13 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
Python:Numpy 求平均向量的实例
2019/06/29 Python
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
美国顶级品牌男士大码服装店:DXL
2017/08/30 全球购物
《中国梦我的梦》大学生演讲稿
2014/08/20 职场文书
实习介绍信模板
2015/01/30 职场文书
老乡聚会通知
2015/04/23 职场文书
2015年度环卫处工作总结
2015/07/24 职场文书
Python中Selenium对Cookie的操作方法
2021/07/09 Python
苹果的回收机器人可以通过拆解iPhone获取大量的金和铜并外公布了环境保护最新进展
2022/04/21 数码科技
Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD的解决方法
2022/07/23 数码科技