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 相关文章推荐
json简单介绍
Jun 10 Javascript
Javascript !!的作用
Dec 04 Javascript
JavaScript使用replace函数替换字符串的方法
Apr 06 Javascript
JavaScript数据结构中栈的应用之表达式求值问题详解
Apr 11 Javascript
jQuery常用选择器详解
Jul 17 jQuery
vue-quill-editor实现图片上传功能
Aug 08 Javascript
jquery实现用户登陆界面(示例讲解)
Sep 06 jQuery
vue-resouce设置请求头的三种方法
Sep 12 Javascript
微信小程序实现动态显示和隐藏某个控件功能示例
Dec 14 Javascript
微信小程序日历组件使用方法详解
Dec 29 Javascript
微信小程序自定义波浪组件使用方法详解
Sep 21 Javascript
three.js 实现露珠滴落动画效果的示例代码
Mar 01 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实现的获取网站备案信息查询代码(360)
2013/09/23 PHP
PHP关键特性之命名空间实例详解
2017/05/06 PHP
jquery api参考 visualjquery 中国线路 速度快
2007/11/30 Javascript
浅谈tudou土豆网首页图片延迟加载的效果
2010/06/23 Javascript
js 事件处理函数间的Event物件是否全等
2011/04/08 Javascript
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
jQuery中:gt选择器用法实例
2014/12/29 Javascript
AngularJs表单验证实例详解
2016/05/30 Javascript
input框中的name和id的区别
2016/11/16 Javascript
Angular的MVC和作用域
2016/12/26 Javascript
JavaScript实现选中文字提示新浪微博分享效果
2017/06/15 Javascript
基于JS实现网页中的选项卡(两种方法)
2017/06/16 Javascript
React Native 使用Fetch发送网络请求的示例代码
2017/12/02 Javascript
Vue精简版风格概述
2018/01/30 Javascript
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
JS中使用cavas截图网页并解决跨域及模糊问题
2018/11/13 Javascript
使用mixins实现elementUI表单全局验证的解决方法
2019/04/02 Javascript
jQuery子选择器与可见性选择器实例分析
2019/06/28 jQuery
[16:56]heroes英雄教学 司夜刺客
2014/09/18 DOTA
Python对象体系深入分析
2014/10/28 Python
Python3实现的字典、列表和json对象互转功能示例
2018/05/22 Python
利用python打开摄像头及颜色检测方法
2018/08/03 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
详解selenium + chromedriver 被反爬的解决方法
2020/10/28 Python
世界首屈一指的在线男士内衣权威:HisRoom
2017/08/05 全球购物
Unineed中文官网:高端护肤美妆与时尚配饰,英国直邮
2020/07/23 全球购物
小学毕业感言150字
2014/02/05 职场文书
普通党员对照检查材料
2014/08/28 职场文书
刑事辩护授权委托书
2014/09/13 职场文书
2014年团支部年度工作总结
2014/12/24 职场文书
介绍信的格式
2015/01/30 职场文书
销售员岗位职责范本
2015/04/11 职场文书
python 自动化偷懒的四个实用操作
2021/04/11 Python
HTML5简单实现添加背景音乐的几种方法
2021/05/12 HTML / CSS
Python selenium模拟网页点击爬虫交管12123违章数据
2021/05/26 Python
Python+Selenium自动化环境搭建与操作基础详解
2022/03/13 Python