用js实现比较版本号的函数

用原生js实现两个版本号的比较,versionCompare (v1,v2),v1、v2是两个参数,代表两个版本号。

函数实现重点是,v1、v2两个参数是string类型。因为版本号是数字和点组成,不保准会有人传进两个数字类型,所以做个判断,将其转化成string。

版本号的比较,要先比较主版本号,所以要把第一个点前面的数字取出来,两个参数比较,如果相同在比较次版本号。

由数字组成的数组,取出来比较式是string类型的比较,这点要注意,需要parseInt转换成数字类型

js实现字符串转化成数字的方法有三种:

  1. 转换函数:
    js提供了parseInt()和parseFloat()两个转换函数。前者把值转换成整数,后者把值转换成浮点数。只有对String类型调用这些方法,这两个函数才能正确运行;对其他类型返回的都是NaN(Not a Number)。

  2. 强制类型转换
    还可使用强制类型转换(type casting)处理转换值的类型。使用强制类型转换可以访问特定的值,即使它是另一种类型的。
    ECMAScript中可用的3种强制类型转换如下:
    Boolean(value)——把给定的值转换成Boolean型;
    Number(value)——把给定的值转换成数字(可以是整数或浮点数);
    String(value)——把给定的值转换成字符串。

  3. 利用js变量弱类型转换
    利用弱类型转换,进行算术运算,实现了字符串到数字的类型转换
    如代码所示:

    1
    2
    3
    4
    5
    <script>
    var str= '012.345 ';
    var x = str-0;
    x = x*1;
    </script>

以下是函数实现(版本号之间似乎是用“,”分割的,版本号内部是“.”分割,原理类似)

<script>
    function versionCompare (v1,v2) {
        if (typeof v1 === "number") {
            v1 = "0" + v1;
            v1 = v1.substr(1,v1.length-1);
        }
        if (typeof v2 === "number") {
            v2 = "0" + v2;
            v2 = v2.substr(1,v2.length-1);
        }

        if(v1 === v2){
            return v1 + "和" + v2 + "版本一样高";
        }
        var v1Arry = v1.split("."),
            v2Arry = v2.split(".");

        for (var i = 0; i < v1Arry.length; i++) {
            if (i > v2Arry.length) {
                return v1 + "版本高";
            }else{

                if (parseInt(v1Arry[i]) > parseInt(v2Arry[i])) {
                    return v1 + "版本高";
                }else if (parseInt(v1Arry[i]) < parseInt(v2Arry[i])) {
                    return v2 + "版本高";
                }
            }
        }

        return v2 + "版本高";
    }


    console.log(versionCompare("1.2","1.3"));
    console.log(versionCompare('7.23.1','13.34.56'));
    var v1 = '12.34.3';
    var v2 = '9.2.43';
    console.log(versionCompare(v1,v2));


</script>
文章目录
,