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