如果/ Else语句嵌套在While循环中

时间:2016-09-28 13:48:01

标签: javascript if-statement while-loop

(我对JavaScript非常陌生并且正在编写此代码以尝试并习惯使用它更多 - 这就是我使用对象存储用户名和密码的原因。我正在学习这个作为学徒期的一部分,但这是在我自己的时间来进一步了解JS) 我尝试编写一小段代码,要求用户输入用户名,该用户名将与对象" userNames "中的属性名称进行交叉检查。然后要求用户输入该用户的密码,然后根据设置为具有正确用户名的相应属性的值的密码进行检查。 我觉得好像问题的一部分是我试图使用变量" enteredPassword " (设置为用户输入的密码作为方法)" userNames "。 如果3次尝试后用户名或密码不正确,那么我希望窗口关闭。 我的文本编辑器说If语句缺少一个分支,我不确定这是否影响这是否有效。



var userNames = {Tom:"PassW0rd", Bill:"Apples40C0lander", Ryan:"M1911p4ck4ge"};
var Greeting = "Insert Username:";

var i = 0;
while (i < 3)
{
    var enteredUserName = prompt(Greeting);
    var enteredPassword = prompt("enter password for " + enteredUserName);

    if ((userNames.hasOwnProperty(enteredUserName)) && (userNames.enteredUserName==enteredPassword)) {
        alert("Welcome");
        break;
    } else {
        alert("incorrect Username or Password");
        alert("");
        window.open('', '_self', ''); window.close();
        window.open('', '_self', ''); window.close();
        i++
    }}
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

这里有一个简单的改变: userNames[enteredUserName]
JavaScript中,Object也可以像array一样访问 如果您使用userNames.enteredUserName,则会检查{enteredUserName:somevalue}(即,enteredUserName将被视为String。但如果您将其用作userNames[enteredUserName],则enteredUserName将被视为Object的变量和索引 请尝试以下代码段。

&#13;
&#13;
var userNames = {Tom:"PassW0rd", Bill:"Apples40C0lander", Ryan:"M1911p4ck4ge"};
var Greeting = "Insert Username:";

var i = 0;
while (i < 3)
{
    var enteredUserName = prompt(Greeting);
    var enteredPassword = prompt("enter password for " + enteredUserName);

    if ((userNames.hasOwnProperty(enteredUserName)) && (userNames[enteredUserName]==enteredPassword)) {
        alert("Welcome");
        break;
    } else {
        alert("incorrect Username or Password");
        alert("");
        window.open('', '_self', ''); window.close();
        window.open('', '_self', ''); window.close();
        i++
    }}
&#13;
&#13;
&#13;