由于大卫施瓦茨没有发布答案,我将发布我的解决方案(这几乎不是解决方案)以及我理解的他的解决方案的演示和解释。
我的解决方案:
我只是停止使用开关并切换到 JSON(数组),因为我的开关的唯一目的是根据输入设置变量。
使用数组时,检查“case”是否存在很容易(只需 run arrayVar["casename"]
,如果不存在则返回 undefined )并且您不需要用额外的变量堵塞命名空间,运行代码稍微多一点困难,因为它需要作为字符串和eval
ed 提供,但总的来说这对我来说效果更好。
无需发布演示或代码,因为它确实不是解决此问题的方法。
大卫施瓦茨的解决方案:
演示:http: //jsfiddle.net/SO_AMK/s9MhD/
代码:
function hasCase(caseName) { return switchName(caseName, true); } // A function to check for a case, this passes the case name to switchName, sets "just checking" to true and passes the response along
function runSwitch(caseName) { switchName(caseName); } // This is actually a mostly useless function but it helps clarify things
function switchName(caseName, c) { // And the actual function, c is the "just checking" variable, I shortened it's name to save code
switch(caseName) { // The switch
case "casename0" : if (c) return true; alert("case"); break; // If c is true return true otherwise continue with the case, returning from inside a case is the same as calling break;
case "casename1" : if (c) return true; alert("case"); break;
case "casename2" : if (c) return true; alert("case"); break;
case "casename3" : if (c) return true; alert("case"); break;
default: if (c) return false; break; // If nothing else ran then the case doesn't exist, return false
}
return c; // Even I (:D) don't understand where this gets changed, but it works
}
说明:根据需要对上面的代码进行注释。</p>