项目需求,添加购物车时,根据库存量判断加减号是否可用,并且输入框可输入
//输入框失去焦点 $(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