項目需求,添加購物車時,根據庫存量判斷加減號是否可用,並且輸入框可輸入
//輸入框失去焦點 $(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