js比较两个数值之间的大小


  项目需求,添加购物车时,根据库存量判断加减号是否可用,并且输入框可输入

//输入框失去焦点
$(inpu).on('blur', function() {
    var stock=$("#sku_stock").text();
    var i = $(this).val();
    if (stock<=1) {
    i = stock;
    }else{
    if (isNaN(i)||i == ""|| i <= 1) {
        i=1;
        $(this).prev().removeClass('cur');
        $(this).next().addClass('cur');
    }else if (i >= stock) {
        console.log('b1')
     console.log(i>=stock)
     console.log(8>10) i
=stock; $(this).next().removeClass('cur'); $(this).prev().addClass('cur'); }else if (1 < i < stock) { console.log('b2') i=$(this).val(); $(this).prev().addClass('cur'); $(this).next().addClass('cur'); } } $(inpu).val(i); })

 

  以上代码是有问题的部分

  假使stock = 10   i=8; 

  当前输入的数量是小于库存数的,按照正常的理解,   1<8 <10  控制台调试应该输出------b2

  但是实际情况是  控制台输出了b1   也就是条件控制语句走了   else if(8>10) 成立了  控制台输出 i>=stock   也是 === true    在我体育老师从小的教导下  我觉得8>10 是不能接受的 

  然后我又在后面输出了console.log(8>10)  控制台输出了false     瞬间裂开了...

  原因就是  javascript中定义的var类型是弱类型,默认是String类型,在比较两个数字大小的时候默认比较的是两个字符串,也就是8和10比较的时候  实际是在和10的第一位1做比较,所以也就是出现了  8大于10的情况.

  使用eval()函数,将var 定义的变量进行类型转换之后

  

//输入框失去焦点
$(inpu).on('blur', function() {
    var stock=$("#sku_stock").text();
    var i = $(this).val();
    if (stock<=1) {
        i = stock;
    }else{
    if (isNaN(i)||i == ""|| i <= 1) {
        i=1;
        $(this).prev().removeClass('cur');
        $(this).next().addClass('cur');
    }else if (eval(i) >= eval(stock)) {
        console.log('b1')
        i=stock;
        $(this).next().removeClass('cur');
        $(this).prev().addClass('cur');
    }else if (1<eval(i)< eval(stock)) {
        console.log('b2')
        i=$(this).val();
        $(this).prev().addClass('cur');
        $(this).next().addClass('cur');
    }
    }
    $(inpu).val(i);
})    

 

再次输入i==8 控制台输出b1

 

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM