我是 JavaScript 新手,几天来一直在与这个相对简单的程序作斗争。
程序:我有一个带有按钮的网站。当您单击该按钮时,系统会生成一个密码(从数组)并向用户显示。
问题:“functiongenerate()”显示单个相同的生成字符 10 次,而不是 10 个不同的字符 10 次,这自然会产生一个更强的密码。我希望它将 10 个不同的字符随机分配到密码中,而不是 10 次使用相同的字符。所以该程序可以运行,但不符合我的预期。
我创建了一个 JSfiddle 包含注释用于显示。请注意,JSfiddle 中禁用了 document.write,因此结果设置为在控制台中显示。
https://jsfiddle.net/ohstmbym/
<!DOCTYPE html>
<html>
<head>
<title></title>
<button onclick="generate()">Button</button>
</head>
<body>
<script>
var arr = ["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"];
randomLetter = arr[Math.floor(arr.length * Math.random())];
function generate () {for (i = 0; i < 10; i++) {document.write(randomLetter); } }
</script>
</body>
</html>
重要:我想理解代码有什么问题/如何修复它 - 我不只是在寻找有人帮我解决它而没有任何问题解释。如果您想帮我解决问题,我非常感激,但请解释一下您是做什么的。另外,请不要像重写整个程序一样完全重写代码以使其正常工作;我正在寻找解决方案/解释,而不是有人把整个事情写下来。如果它完全错误并且需要完全重写,请简单地用文字解释应该做什么。
不过,提前非常感谢您,非常感谢您的帮助。
(P.S.我知道仅使用小写字母生成密码安全性会较弱,但这仅用于实验)
最佳答案
问题是您没有重新生成随机元素,而是在 randomLetter
中缓存一次随机元素,因此它始终相同。每次引用变量时,它的值都不会改变。将其放入 for 循环中以在每次迭代时重新生成数字:
var arr = ["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"];
function generate () {
for (i = 0; i < 10; i++) {
var randomLetter = arr[Math.floor(arr.length * Math.random())];
document.write(randomLetter);
}
}
关于JavaScript 密码生成器 - 数组中的多个随机值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44114924/