Is it possible to use .contains() in a switch statement?

后端 未结 2 444
萌比男神i
萌比男神i 2021-01-03 19:18

This is just a simple example of what I\'m trying to do:

switch (window.location.href.contains(\'\')) {
    case \"google\":
        searchWithGoogle();
             


        
相关标签:
2条回答
  • 2021-01-03 19:46

    "Yes", but it won't do what you expect.

    The expression used for the switch is evaluated once - in this case contains evaluates to true/false as the result (e.g. switch(true) or switch(false)) , not a string that can be matched in a case.

    As such, the above approach won't work. Unless this pattern is much larger/extensible, just use simple if/else-if statements.

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

    However, consider if there was a classify function that returned "google" or "yahoo", etc, perhaps using conditionals as above. Then it could be used as so, but is likely overkill in this case.

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

    While the above discusses such in JavaScript, Ruby and Scala (and likely others) provide mechanisms to handle some more "advanced switch" usage.

    0 讨论(0)
  • 2021-01-03 19:52

    An alternative implementation might be this. Not much in it but reads better than 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');
    };
    
    0 讨论(0)
提交回复
热议问题