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

时间:2015-01-24 17:50:43

标签: javascript jquery switch-statement

我正在尝试使用一些简单的运算符的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

3 个答案:

答案 0 :(得分:2)

要在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;

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

Switch不通过评估布尔表达式来工作。 Switch评估初始表达式,然后尝试使用严格相等将案例与该表达式匹配。所以你不能做

case(x<4.5):

您必须执行类似

的操作
case 4:

使用if,else if,else statments。