使用.includes()时,switch语句不起作用

时间:2017-04-15 06:36:40

标签: javascript node.js string switch-statement

client.on('chat', function(channel, userstate, message, self){



  switch(message){
    case message.includes(emotes[0]):
      numberOfEmotes[0]++;
      console.log("Emote0 has been used " + numberOfEmotes[0] + " time(s)");
      break;
    case message.includes(emotes[1]):
      numberOfEmotes[1]++;
      console.log("Emote1 has been used " + numberOfEmotes[1] + " time(s)");
      break;
    case message.includes(emotes[2]):
      numberOfEmotes[2]++;
      console.log("Emote2 has been used " + numberOfEmotes[2] + " time(s)");
      break;
    case message.includes(emotes[3]):
      numberOfEmotes[3]++;
      console.log("Emote3 has been used " + numberOfEmotes[3] + " time(s)");
      break;
  }

/*  if(message.includes(emotes[0])){
    numberOfEmotes[0]++;
    console.log("Emote0 has been used " + numberOfEmotes[0] + " time(s)");
  }*/


  //console.log("** " + message + " **");
});

当调用函数chat.on时,带有字符串的消息变量应该通过switch语句运行,我有一个包含不同字符串的数组,如果消息包含该数组的字符串,则运行case。但是没有任何事情发生,这似乎是对的,这可能是错的吗?

2 个答案:

答案 0 :(得分:1)

开关不按您期望的方式工作。它采用switch中写入的值并与case块中的每个值进行比较。因此,在您的情况下,它会将true / false与值消息进行比较,并且它不会找到相同的值,因此不会发生任何事情。 您必须使用if else语句或解析消息并排除值 消息'输入/ emote1' 在斜线下提取所有内容并将其放入开关

答案 1 :(得分:1)

解决此问题的一种方法是使用switch(true)而不是switch(method)。这将起作用,因为它将比较true(boolean)与case语句。包含emote [0]的Case语句将返回true,因此它将继续执行该块。希望对您有所帮助。