我想要出现提示并要求用户输入正确的密码。每次用户键入错误的pw时,都会重新出现提示。我不明白为什么下面的代码不起作用:
var secret = prompt("What is the password?");
while ( secret !== "sesame" ) {
secret;
}
document.write("Welcome.");
如果"secret"
是一个全局变量,那么在while循环中它应该被解释为具有值prompt("What is the password?")
?
但事实证明我应该在while循环中写secret = prompt("What is the password?");
:
var secret = prompt("What is the password?");
while ( secret !== "sesame" ) {
secret = prompt("What is the password?");
}
document.write("Welcome.");
为什么要两次声明变量secret
的相同值?
答案 0 :(得分:2)
一行只是secret;
的代码什么都不做 - 它仅仅引用了一个名为secret
的变量,但没有做任何事情。
你的意思是:
var secret;
while(secret !== 'secretpassword') secret = prompt("What's the password?");
对于循环的第一次迭代secret
不等于密码,因此运行提示。它会反复运行,直到输入正确的值。
但是,您的方法存在很多问题。
首先,持久的对话窗口(其中一个提示是一种)不是非常友好的UI;他们必然需要专注,所以你不能在不与他们互动的情况下点击他们。如果用户想要忽略提示并单击“忘记密码”链接或使用页面的其他部分,该怎么办?
其次,在JavaScript中存储密码是一个巨大而明显的安全风险,但我认为这是一个教程或某种类型的家庭作业,其重点不在于安全性。
第三,document.write()
很久以前就被弃用了,而且这些天几乎没有用。而是转向DOM脚本。
答案 1 :(得分:0)
在变量中指定表达式时,变量仅包含该表达式返回的值,而不包含表达式本身
因此,评估变量不会产生任何影响,并且不会再次评估指定的表达式。
如果您不想重复此功能调用,可以使用do while
循环
var secret;
do {
secret = prompt("What is the password?");
} while ( secret !== "sesame" );
但当然,JS密码是无用的