首页 > 解决方案 > 为什么我的选项卡中有时会出现未定义?

问题描述

我做了随机密码生成器,它工作正常,但有时当我滚动新通行证时,控制台中的 var 文本内部没有定义。如何解决?

function generate()
{
    var tab = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9'];
    var text = [];


    for (var i = 0; i < 10; i++) {
        x = Math.random()*tab.length;
        z = Math.round(x)
        text.push(tab[z]);
    }
    console.log(text);
    document.getElementById('input1').value = text.join('');
}
<!DOCTYPE html>
<html>
    <script src="script.js"></script>
    <link rel="stylesheet" href="style.css">
<head></head>
</head>
<body>
    <div class="randompass">
    <input id="input1"></input>
    <button onclick="generate()">Create random</button>
    </div>
</body>
</html>

标签: javascripthtmlarraysrandompasswords

解决方案


您想使用Math.floor()而不是-由于向上舍入,您有时会在使用时Math.round最终选择tab.length + 1Math.round

function generate() {
  var tab = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
  var text = [];

  for (var i = 0; i < 10; i++) {
    x = Math.random() * tab.length;
    z = Math.floor(x)
    text.push(tab[z]);
  }
  console.log(text);
  document.getElementById('input1').value = text.join('');
}
<body>
  <div class="randompass">
    <input id="input1">
    <button onclick="generate()">Create random</button>
  </div>
</body>


推荐阅读