我的问题可能令人尴尬。如果我知道要具体问什么问题,我会咨询Google,但是,我是代码新手,因此对行话不熟悉...
我正在关注书面教程@ https://javascript.info。我正在上关于条件运算符和if语句的课程,无法将我的头缠在其中一个任务(http://javascript.info/ifelse#tasks)的行为上,尤其是任务4的行为。 “检查登录名”。
代码如下:
let userLogin = prompt("Who's there?", "");
if (userLogin == 'Admin') {
let pass = prompt("Password?", ""); // *******
if (pass == 'TheMaster') {
alert('Welcome!');
} else if (!pass) {
alert("Canceled.");
} else {
alert('I do not know you');
}
} else if (!userLogin) {
alert("Canceled");
} else {
alert("I don't know you")
}
我的问题围绕(****)线。如果该行未嵌套在“ if”中,则代码将无法正常工作,这使我不知所措(首先将其作为“全局”变量,必须检查解决方案,因为我找不到该错误) 。
请问您,为什么要这样。 :(
修改 我没有意识到自己是不明确的。我是论坛的新手,不会再发生了。
该代码无效,这意味着在进入“通过”提示时无需在第一个提示中写入“管理员”。仅当我没有将“ pass”声明嵌套在“ if”中时,才会发生此行为。我认为我找到了答案,但想进行编辑以免进一步激怒社区。 :P
let userLogin = prompt("Who's there?", "");
let pass = prompt("Password?", ""); // *******
if (userLogin == 'Admin') {
if (pass == 'TheMaster') {
alert('Welcome!');
} else if (!pass) {
alert("Canceled.");
} else {
alert('I do not know you');
}
} else if (!userLogin) {
alert("Canceled");
} else {
alert("I don't know you")
}
这就是我的意思-希望这可以澄清!再次抱歉。
答案 0 :(得分:1)
我的猜测是,您在单独的嵌套作用域中拥有通行证,或者在使用通行证后对其进行了声明。 let
声明不像hoisted
声明那样var
。因此,在声明之后,必须从相同的作用域或该作用域的更多嵌套作用域访问它们。
let userLogin = prompt("Who's there?", "");
let pass = prompt("Password?", ""); // *******
if (userLogin == 'Admin') {
if (pass == 'TheMaster') {
alert('Welcome!');
} else if (!pass) {
alert("Canceled.");
} else {
alert('I do not know you');
}
} else if (!userLogin) {
alert("Canceled");
} else {
alert("I don't know you")
}
好奇的情况下指向吊装定义的链接:https://developer.mozilla.org/en-US/docs/Glossary/Hoisting
PS-我希望这只是一个玩具问题...但是如果不是请,请不要使用它来执行实际的身份验证。页面Javascript中的所有内容都是所有人可见的,并且您的用户名和密码不是安全的。
答案 1 :(得分:0)
我发现的唯一区别是,如果从if块中删除行( *),脚本将要求用户提供** userLogin 和 pass ,然后进行检查。如果您不这样做,脚本将要求输入 userLogin ,如果这不正确,则您不会浪费时间要求 pass 。正如其他人所说,最好是确切说明您遇到的问题。