2014-07-19 37 views
10

这是我想要做的只是一个简单的例子:是否可以在switch语句中使用.contains()?

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

你试过使用正则表达式吗? –

+0

不需要。它必须是'switch(true){case location.href.contains(“google”)...'这简直是愚蠢的 – mplungjan

+0

是的,但它不会达到您的期望。用于开关的表达式被评估*一次* - 在这种情况下,结果是真/假,而不是字符串。 – user2864740

回答

7

”是“,但它不会达到您的预期。

用于开关的表达式进行求值一次 - 在这种情况下contains评估为真/假值作为结果(例如switch(true)switch(false)) ,不能够在一个壳体相匹配的字符串。

因此,上述方法将不起作用。除非这种模式比较大/可扩展,否则只需使用简单的if/else-if语句。

var loc = .. 
if (loc.contains("google")) { 
    .. 
} else if (loc.contains("yahoo")) { 
    .. 
} else { 
    .. 
} 

然而,考虑是否有是返回“Google”或“雅虎”一classify功能等,或许使用上述条件语句。然后可以这样使用它,但在这种情况下可能会过度使用。

switch (classify(loc)) { 
    case "google": .. 
    case "yahoo": .. 
    .. 
} 

虽然上述讨论在JavaScript和Ruby和Scala(以及可能其它)这样的机制来处理一些更“高级开关”的使用。

+0

谢谢你的回答。它帮助我找到一个解决方案,我更新了包含的主要答案。 – RayB

+0

@ Rayz321是的,这也是一种可能的形式 - 但这不是我的偏好/建议。 – user2864740

相关问题