1

这是一个为我的世界服务器论坛判断版主应用程序的程序。我想知道为什么除了默认值之外什么都没有输出。请帮帮我。

代码就在这里:

     var moderatorApplicant=new Object();
moderatorApplicant.active=true; //boolean;
moderatorApplicant.age=15; //number;
moderatorApplicant.applicationLength="long"; //string, "short" or "long";
console.log("Moderator Application Judge Result:");
switch(moderatorApplicant)
{
case (moderatorApplicant.active===true&&moderatorApplicant.age>=14&&moderatorApplicant.applicationLength=="long"):
    console.log("You are fit for a mod! +1");
    break;
case (moderatorApplicant.active===true&&moderatorApplicant.age<14&&moderatorApplicant.applicationLength=="long"):
    console.log("You're active! You're app is long! You aren't 14 or over though, so +0.");
    break;
case (moderatorApplicant.active===true&&moderatorApplicant.age>=14&&moderatorApplicant.applicationLength=="short"):
    console.log("App is short, but you're active, and you meet age requirements. +0");
    break;
case (moderatorApplicant.active===true&&moderatorApplicant.age<14&&moderatorApplicant.applicationLength=="short"):
    console.log("You're active, your app is short, and you are younger than 14. -1");
    break;
case (moderatorApplicant.active===false&&moderatorApplicant.age>=14&&moderatorApplicant.applicationLength=="long"):
    console.log("You are not active, but you are over 14 and have a long app. Try again when you are more active +0");
    break;
case (moderatorApplicant.active===false&&moderatorApplicant.age<14&&moderatorApplicant.applicationLength=="long"):
    console.log("You're young, you aren't active, but your app is long. -1");
    break;
case (moderatorApplicant.active===false&&moderatorApplicant.age>=14&&moderatorApplicant.applicationLength=="short"):
    console.log("You are not active. You made a short app, but you are over 14. -1");
    break;
case (moderatorApplicant.active===false&&moderatorApplicant.age<14&&moderatorApplicant.applicationLength=="short"):
    console.log("This is the definition of a bad application. Not active, younger than 14, and short app. -1.");
    break;
default:
    console.log("Check again. Inappropriate values.");
    break;
}
4

2 回答 2

3

在 JavaScript 中,switch 语句需要一个常量值(文字数字或字符串)。您应该使用if/else语句才能在每种情况下使用表达式。

于 2013-11-13T04:11:25.010 回答
1

正如Maurício Linhares已经回答的那样,不应以这种方式使用 switch 语句。

下面是一个使用 if 语句的重构实现示例:

var moderatorApplicant= {
  active            : true,   //boolean;
  age               : 15,     //number;
  applicationLength : "long"  //string, "short" or "long";
}
console.log("Moderator Application Judge Result:");

var message;

if (moderatorApplicant.active) {
  if (moderatorApplicant.age >=14) {
    if (moderatorApplicant.applicationLength=="long") {
      message = "You are fit for a mod! +1";
    } else {
      message = "App is short, but you're active, and you meet age requirements. +0";
    }
  } else {
    if (moderatorApplicant.applicationLength=="long") {
      message = "You're active! You're app is long! You aren't 14 or over though, so +0.";
    } else {
      message = "You're active, your app is short, and you are younger than 14. -1";
    }
  }
} else {
  if (moderatorApplicant.age >=14) {
    if (moderatorApplicant.applicationLength=="long") {
      message = "You are not active, but you are over 14 and have a long app. Try again when you are more active +0";
    } else {
      message = "You are not active. You made a short app, but you are over 14. -1";
    }
  } else {
    if (moderatorApplicant.applicationLength=="long") {
      message = "You're young, you aren't active, but your app is long. -1";
    } else {
      message = "This is the definition of a bad application. Not active, younger than 14, and short app. -1.";
    }
  }
}

if (!message) message = "Check again. Inappropriate values.";
console.log(message);

这是另一个示例,使用标志代替,以及带有字符串的对象。

var moderatorApplicant= {
  active            : true,   //boolean;
  age               : 15,     //number;
  applicationLength : "long"  //string, "short" or "long";
}
console.log("Moderator Application Judge Result:");

var messages = {
  'ayl' : "This is the definition of a bad application. Not active, younger than 14, and short app. -1.",
  'ayL' : "You're young, you aren't active, but your app is long. -1",
  'aYl' : "You are not active. You made a short app, but you are over 14. -1",
  'aYL' : "You are not active, but you are over 14 and have a long app. Try again when you are more active +0",
  'Ayl' : "You're active, your app is short, and you are younger than 14. -1",
  'AyL' : "You're active! You're app is long! You aren't 14 or over though, so +0.",
  'AYl' : "App is short, but you're active, and you meet age requirements. +0",
  'AYL' : "You are fit for a mod! +1"
};

var flags =
 (moderatorApplicant.active ? 'A' : 'a') +
 (moderatorApplicant.age >= 14  ? 'Y' : 'y') +
 (moderatorApplicant.applicationLength=='long' ? 'L' : 'l');

var message = messages[flags];
if (!message) message = "Check again. Inappropriate values.";
console.log(message);
于 2013-11-13T04:28:39.967 回答