为什么我的 jquery switch 语句不起作用?

Why isn't my jquery switch statement working?

我正在尝试使用一些简单运算符的 jquery (javascript) switch 语句,但它没有像预期的那样工作

console.log('test '+getShippingCost(8));
function getShippingCost(shop_qty) {
                shipping_costs = 0;
                dest = $("input[name='dest']").val();
                console.log(dest);
                if (dest === 'DOMESTIC') {

                    switch (shop_qty) {
                        case (shop_qty > 4):
                             shipping_costs = 3.5;
                            break;
                        case (shop_qty <= 4):
                             shipping_costs = 2;
                                break;
                        }
                        console.log('domestic shipping '+shipping_costs);
                }
                if (dest === 'INT') {
                            switch (shop_qty) {
                                case (shop_qty > 4):
                                    shipping_costs = 4.5;
                                    break;
                                case (shop_qty <= 4):
                                    shipping_costs = 3;
                                    break;
                            }
                        }

                        return shipping_costs;
                        }//end function

see jsfiddle

switch 语句中的案例计算值,而不是布尔表达式:See Here

您可以将尝试使用 switch 语句所建议的逻辑放在三元表达式中,例如:

shipping_costs = (shop_qty > 4) ? 3.5 : 2;

Switch 无法通过计算布尔表达式来工作。 Switch 计算一个初始表达式,然后尝试使用严格相等将 case 与该表达式匹配。所以你不能做

case(x<4.5):

你必须做类似

的事情
case 4:

改用 if、else if、else 语句。

要为 switch 中的案例使用条件,您需要在案例中寻找 true 值:

switch (true) {
  case (shop_qty > 4):
    shipping_costs = 3.5;
    break;
  case (shop_qty <= 4):
    shipping_costs = 2;
    break;
}

由于第二种情况与第一种情况相反,因此您只需使用 default 即可:

switch (true) {
  case (shop_qty > 4):
    shipping_costs = 3.5;
    break;
  default:
    shipping_costs = 2;
    break;
}

当你有多个条件时,这样的构造更适合。您应该考虑 if 语句是否更适合这种情况:

if (shop_qty > 4) {
    shipping_costs = 3.5;
} else {
    shipping_costs = 2;
}

由于这两种情况都是给同一个变量赋值,所以也可以使用条件运算符来写:

shipping_costs = shop_qty > 4 ? 3.5 : 2;