使用switch语句在javascript中更改小时数时显示不同的消息

Stu*_*ent 1 javascript jquery if-statement switch-statement

它在if/else语句中运行良好,但是一旦使用switch语句,默认消息只显示,即使我的本地时间小于24(12am).一如既往地感谢您的帮助.

  var today = new Date();
  var timeNow = today.getHours()
  var greeting = $("#greeting");

switch (timeNow) {
    case timeNow > 17 : greeting = "Good Evening </br> Welcome To My Website";
    break;
    case timeNow > 12 : greeting = "Good Afternoon </br> Welcome To My Website";
    break;
    case timeNow > 6 : greeting = "Good Morning </br> Welcome To My Website";
    break;
    default: greeting = "Welcome... but isn't it bed time now?";
  }

  $('#greeting').html('<h1>' + greeting + '<h1>');
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1 id="greeting">Welcome!</h1>
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 5

你的switch声明是试图的值进行比较,timeNow结果timeNow > 17和这样,这将是一个布尔值(truefalse).当然,没有任何的匹配,因为没有Date实例===要么truefalse.

你原来if/else if/else可能是正确的方法.

但是,您可以switch在JavaScript中使用它(与许多其他语言不同),因为case值可以是表达式,并且它们以源代码顺序进行评估,只使用第一个匹配的值(除了default,如果使用的话,总是使用最后一个没有其他人匹配).所以如果你改变了

switch (timeNow) {
Run Code Online (Sandbox Code Playgroud)

switch (true) {
Run Code Online (Sandbox Code Playgroud)

...然后将true其与结果进行比较timeNow > 17:

var today = new Date();
  var timeNow = today.getHours()
  var greeting = $("#greeting");

switch (true) { // <=== Change is here
    case timeNow > 17 : greeting = "Good Evening </br> Welcome To My Website";
    break;
    case timeNow > 12 : greeting = "Good Afternoon </br> Welcome To My Website";
    break;
    case timeNow > 6 : greeting = "Good Morning </br> Welcome To My Website";
    break;
    default: greeting = "Welcome... but isn't it bed time now?";
  }

  $('#greeting').html('<h1>' + greeting + '<h1>');
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1 id="greeting">Welcome!</h1>
Run Code Online (Sandbox Code Playgroud)

此外,虽然:你原来if/else if/else可能是走正道.