javascript开关(true)

时间:2010-05-04 14:08:01

标签: javascript

您好我正在尝试处理ajax json响应

这是我的代码

success: function (j) {     
    switch(true)
    {
        case (j.choice1):

            alert("choice2");
        break;
        case (j.choice2):
                alert("choice2");
        break;
        default:
            alert("default");
        break;
    }
}

基于j返回我做我的动作但我继续获得默认值。

我已警告j值并且正确。有些情况(j.choice1)案例(j.choice2)无法正常工作。

我试过案例(j.choice1!=“”)(j.choice2!=“”)但在这种情况下我一直是第一选择。

我缺少什么

5 个答案:

答案 0 :(得分:28)

它对我有用:

var a = 0, b = true;
    
switch(true) {
    case a:
        console.log('a');
        break;
    case b:
        console.log('b');
        break;
}

但是,case标签必须等于true,而不是jut隐含为真。
此外,只有第一个评估为true的案例才会执行。

答案 1 :(得分:3)

您需要阅读switch声明。你不应该打开一个恒定值。

您似乎需要使用if语句,因为您实际上并不想切换j值:

success: function (j) {     
    if (j.choice1)
    {
        alert("choice1");
        break;
    }

    if (j.choice2)
    {
        alert("choice2");
        break;
    }

    alert("default");
  }
}

答案 2 :(得分:3)

<强>解决

基于SLaks回答我修改下面的代码

    if(j.choice1){ var choice1=true;} else { var choice1=false;}
    if(j.choice2){ var choice2=true;} else { var choice2=false;}

    switch(true)
    {
        case choice1:
            alert("choice1");
        break;
        case choice2:
            alert("choice2");
        break;
        default:
            alert("default");
        break;
    }

所有人都问为什么要切换,而不是if。

Switch只执行1条语句,但如果有任何错误从表格中执行,则执行多于1条(例如,如果设置了choice1和选项2,则if会提醒两者,但是switch只会提示choice1)。

期待作为选择的回应与银行的信用卡收费有关,所以我想确保只有1个行动将会出现

感谢所有

答案 3 :(得分:0)

在这种情况下,更好的方法可能是:

success: function (j) {
    if(j.choice1 || j.choice2) {
        alert("choice2");
    } else {
        alert("default");
    }
}

答案 4 :(得分:0)

为什么不使用对象字面量而不是 switch(true) ?

const j= {
    choice1: false,
    choice2: true
};

const map = {
    true: 'default',
    ...(j.choice1 ? {[`${j.choice1}`]: 'choice1'} :{}),
    ...(j.choice2 ? {[`${j.choice2}`]: 'choice2'} :{})
}['true']

console.log(map) // 'choice2'