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 相关文章推荐
ext实现完整的登录代码
Aug 08 Javascript
javascript判断非数字的简单例子
Jul 18 Javascript
jquery复选框全选/取消示例
Dec 30 Javascript
Node.js 学习笔记之简介、安装及配置
Mar 03 Javascript
浅析Node.js的Stream模块中的Readable对象
Jul 29 Javascript
jQuery表格插件datatables用法详解
Nov 23 Javascript
jquery+ajax实现直接提交表单实例分析
Jun 17 Javascript
javascript使用闭包模拟对象的私有属性和方法
Oct 05 Javascript
JavaScript中 this 指向问题深度解析
Feb 21 Javascript
解析Vue.js中的组件
Feb 02 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
Jul 09 Javascript
js实现图片粘贴到网页
Dec 06 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 4.2书写安全的脚本
2006/10/09 PHP
基于php伪静态的实现详细介绍
2013/04/28 PHP
浅析PHP原理之变量(Variables inside PHP)
2013/08/09 PHP
ubuntu下配置nginx+php+mysql详解
2015/09/10 PHP
js用图作提交按钮或超连接
2008/03/26 Javascript
window.onload 加载完毕的问题及解决方案(下)
2009/07/09 Javascript
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
JS读取cookies信息(记录用户名)
2012/01/10 Javascript
window.open的页面如何刷新(父页面)上层页面
2012/12/28 Javascript
兼容主流浏览器的iframe自适应高度js脚本
2014/01/10 Javascript
使用angular写一个hello world
2015/01/23 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
微信小程序 前端源码逻辑和工作流详解
2016/10/08 Javascript
利用BootStrap的Carousel.js实现轮播图动画效果
2016/12/21 Javascript
完美解决浏览器跨域的几种方法(汇总)
2017/05/08 Javascript
JS跨域请求的问题解析
2018/12/03 Javascript
webpack5 联邦模块介绍详解
2020/07/08 Javascript
在Python中用split()方法分割字符串的使用介绍
2015/05/20 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
2017/06/20 Python
Python中动态检测编码chardet的使用教程
2017/07/06 Python
使用python和Django完成博客数据库的迁移方法
2018/01/05 Python
Python wxPython库使用wx.ListBox创建列表框示例
2018/09/03 Python
解决TensorFlow GPU版出现OOM错误的问题
2020/02/03 Python
彪马美国官网:PUMA美国
2017/03/09 全球购物
美国知名平价彩妆品牌:e.l.f. Cosmetics
2017/11/20 全球购物
环保倡议书100字
2014/05/15 职场文书
出国签证在职证明范本
2014/11/24 职场文书
房屋授权无偿使用证明
2014/11/29 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
入党函调证明材料
2014/12/24 职场文书
志愿者服务活动总结报告
2015/05/06 职场文书
因家庭原因离职的辞职信范文
2015/05/12 职场文书
消费者理赔投诉书
2015/07/02 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
elasticSearch-api的具体操作步骤讲解
2021/06/28 Java/Android
Python pandas之求和运算和非空值个数统计
2021/08/07 Python