这只是我正在尝试做的一个简单示例:
switch (window.location.href.contains('')) {
case "google":
searchWithGoogle();
break;
case "yahoo":
searchWithYahoo();
break;
default:
console.log("no search engine found");
}
如果不可能/可行什么是更好的选择?
解决方案:
在阅读了一些回复后,我发现以下内容是一个简单的解决方案。
function winLocation(term) {
return window.location.href.contains(term);
}
switch (true) {
case winLocation("google"):
searchWithGoogle();
break;
case winLocation("yahoo"):
searchWithYahoo();
break;
default:
console.log("no search engine found");
}
答案 0 :(得分:13)
"是",但它不会做你期望的事。
用于交换机的表达式一次进行评估 - 在这种情况下,contains
评估结果为真/假(例如switch(true)
或switch(false)
)
,而不是在案件中可以匹配的字符串。
因此,上述方法不会奏效。除非这个模式更大/可扩展,否则只需使用简单的if / else-if语句。
var loc = ..
if (loc.contains("google")) {
..
} else if (loc.contains("yahoo")) {
..
} else {
..
}
但是,请考虑是否有classify
函数返回" google"或者" yahoo"等,也许使用上述条件。然后它可以这样使用,但在这种情况下可能有点过分。
switch (classify(loc)) {
case "google": ..
case "yahoo": ..
..
}
虽然以上在JavaScript中讨论过这种情况,但Ruby和Scala(以及其他可能的其他人)提供了处理更多"高级交换机的机制。的使用。
答案 1 :(得分:1)
替代实现可能是这样。它虽然不多,但读起来比switch(true)好。
const href = window.location.href;
const findTerm = (term) => {
if (href.includes(term)){
return href;
}
};
switch (href) {
case findTerm('google'):
searchWithGoogle();
break;
case findTerm('yahoo'):
searchWithYahoo();
break;
default:
console.log('No search engine found');
};