You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么我的JavaScript布尔判断语句总是返回true?销售税计算异常

问题根因

你的条件判断写法存在逻辑错误:
在JavaScript中,||(逻辑或)运算符两边为独立判断条件,你写的cart.shippingAddress.state === 'New York'||'NY'的实际执行逻辑是:

  1. 先判断state === 'New York'是否成立
  2. 如果不成立,会直接返回'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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:15:03