我是JavaScript的新手,并且几天来一直在与这个相对简单的程序作斗争。
程序:我的网站上有一个按钮。单击该按钮时,将生成密码(从阵列中)并显示给用户。
问题:"函数generate()"显示单个相同的生成字符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。我知道只有用于密码生成的小写字母的安全性较弱,但这仅用于实验)
答案 0 :(得分:3)
问题是你没有重新生成随机元素,你在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);
}
}