为什么我的JavaScript布尔判断语句总是返回true?销售税计算异常
问题根因
你的条件判断写法存在逻辑错误:
在JavaScript中,||(逻辑或)运算符两边为独立判断条件,你写的cart.shippingAddress.state === 'New York'||'NY'的实际执行逻辑是:
- 先判断
state === 'New York'是否成立 - 如果不成立,会直接返回
'NY'这个字符串,而非你预期的判断state === 'NY'
而非空字符串在布尔判定中永远为真,所以第一个if条件会永远触发,税费就固定按8.75%计算。
修复方案
把销售税计算部分的判断逻辑改成以下两种写法任意一种即可:
写法1:补全完整判断条件
//Sales Tax// if (cart.shippingAddress.state === 'New York' || cart.shippingAddress.state === 'NY'){ cart.taxPrice = toPrice(0.0875 * cart.itemsPrice) } else if (cart.shippingAddress.state === 'Kansas' || cart.shippingAddress.state === 'KS') { cart.taxPrice = toPrice(0.065 * cart.itemsPrice) } else { cart.taxPrice = toPrice(0 * cart.itemsPrice) }
写法2:用数组includes简化判断(更易维护)
如果后续要加更多州的别名,这种写法更简洁:
//Sales Tax// const stateVal = cart.shippingAddress.state if (['New York', 'NY'].includes(stateVal)){ cart.taxPrice = toPrice(0.0875 * cart.itemsPrice) } else if (['Kansas', 'KS'].includes(stateVal)) { cart.taxPrice = toPrice(0.065 * cart.itemsPrice) } else { cart.taxPrice = toPrice(0 * cart.itemsPrice) }
额外优化建议
你当前直接修改从useSelector获取的cart对象属于直接修改Redux状态,不符合Redux不可变修改的规范,后续可能引发状态更新不触发渲染的问题,建议你计算税费时创建新的变量存储计算后的值,而非直接修改原cart对象。
内容的提问来源于stack exchange,提问作者Luxe101
相关产品推荐
相关产品推荐

