如何在JavaScript中使用switch

时间:2017-07-30 06:23:42

标签: javascript switch-statement

我一直在尝试创建一个密码生成器,我有这个代码,它正在返回" undefined"不是一个角色。该代码应返回16个字符,包括数字,低位和高位字符。我想拥有这个,这样我就不用担心自己制作自己的密码了。



<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>PassGen</title>
  <script>
    function getRandomInt(min, max) {
      return Math.floor(Math.random() * (max - min + 1)) + min;
    }

    function num2lett(num) {
      switch (num) {
        case (num > 36):
          return String.fromCharCode(577 + num - 35);
          break;
        case (num > 10 && num < 37):
          return String.fromCharCode(97 + num - 11);
          break;
        case (num == 10):
          return "0";
          break;
        case (num < 10):
          return "" + num;
          break;
      }

    }

    function uuidMake() {
      var uuid = "";
      for (u = 0; u < 16; u++) {
        randNum = getRandomInt(0, 62);
        uuid += num2lett(randNum);
      }
      document.getElementById("password").innerHTML = uuid;
    }
  </script>
  <style>
    @font-face {
      font-family: "uuid_font";
      src: url("Courier Prime Code.ttf") format("TrueType");
    }
    
    body {
      background-color: #262626;
    }
    
    #password {
      font-family: "uuid_font";
      text-align: center;
      font-size: 30px;
      color: #dddddd;
      margin-top: 250px;
    }
  </style>

  <body>
    <p id="password" onclick="uuidMake();">Click Me</p>
  </body>

</html>
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:2)

这不是switch的好用例。使用ifelse语句。

case语句中的switch是您switch表达式的特定可能值。例如,人们可能会写一些类似的东西:

switch (n) {
    case 1:
        // things to do when n is 1
        break;
    case 3:
    case 4:
        // things to do when n is 3 or 4
        break;
    default:
        // things to do when n is neither 1, 3, nor 4
}

case语句不能是一系列值。建议不要将表达式用作case - 它不是无效,但它可能无法达到预期效果。

答案 1 :(得分:1)

你不能像if else一样使用case语句,所以只要使用if else条件,就像下面的例子一样。

function getRandomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

function num2lett(num) {
  if (num > 36)
    return String.fromCharCode(577 + num - 35);
  else if (num > 10 && num < 37)
    return String.fromCharCode(97 + num - 11);
  else if (num == 10)
    return "0";
  else if (num < 10)
    return "" + num;
}

function uuidMake() {
  var uuid = "";
  for (u = 0; u < 16; u++) {
    randNum = getRandomInt(0, 62);
    uuid += num2lett(randNum);
  }
  document.getElementById("password").innerHTML = uuid;
}
@font-face {
  font-family: "uuid_font";
  src: url("Courier Prime Code.ttf") format("TrueType");
}

body {
  background-color: #262626;
}

#password {
  font-family: "uuid_font";
  text-align: center;
  font-size: 30px;
  color: #dddddd;
  margin-top: 250px;
}
<p id="password" onclick="uuidMake();">Click Me</p>

我不知道你的算法是什么,所以我只是将你的算法转换为if else

答案 2 :(得分:1)

switch块中,您已在case中编写了条件语句。

您不能在switch块中使用条件语句。因此,在您的情况下,case都没有执行。由于您没有default块,因此您的函数不返回任何内容,如果javascript为undefined。因此,您将获得undefined

答案 3 :(得分:0)

您可以更改switch语句以使其正常工作。在switch中传递'true'并从case条件中删除括号

switch (true) {
   case num > 36: