2016-09-28 3 views
2

(Я очень новичок в JavaScript, и я пишу это, чтобы попытаться привыкнуть к его использованию немного больше - вот почему я использую объект для хранения имен пользователей и паролей. Я изучаю это как часть ученичества, но это в мое личное время, чтобы дополнить мои знания в JS). Я пробовал написать небольшой фрагмент кода, который должен попросить пользователя ввести имя пользователя, которое будет перепроверено против имена свойств в объекте «userNames». Затем пользователю предлагается ввести пароль для этого пользователя, который затем проверяется на установленный пароль как значение соответствующего свойства с правильным именем пользователя. Я чувствую, что часть проблемы связана со мной, пытаясь использовать переменную «ВведенаПассификатор» (установлен на вход пользователя для пароля как метод) «userNames». Если имя пользователя или пароль неверны после трех попыток, я хотел бы закрыть окно. мой текстовый редактор говорит, что в инструкции If отсутствует ветка, и я не уверен, влияет ли это на то, работает это или нет.If/Else statement inested in While loop

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++ 
 
    }}

+1

Удалите точку с запятой после 'if'-заявление –

+0

вы не увеличивающиеся я, так что я <3 всегда верно, и вы Creat бесконечный цикл – StackOverMySoul

+0

Код не компилируется из-за 'semicolon' после' if-statement'. Точка с запятой закрывает все 'if', поэтому' else' больше не принадлежит ему -> синтаксическая ошибка. Он интерпретируется как «короткое письмо» 'if' только с одной командой. Синтаксис таков: 'if (выражение) command;'. Вы видите, что '' '' '' '' '' '' '' необходимо, если вы используете только одну команду. Единый ';' без чего-либо интерпретируется как «пустая команда», поэтому 'if (выражение); 'завершает' if'. – Zabuza

ответ

0

Простое изменение здесь достаточно: userNames[enteredUserName].
В JavaScript, Object также можно получить доступ, например array.
Если вы используете userNames.enteredUserName, то он будет проверять {enteredUserName:somevalue} (т.е. enteredUserName будет рассматриваться как String. Но если вы используете его в качестве userNames[enteredUserName], то enteredUserName будет рассматриваться в качестве переменной и индекса к Object.
Попробуйте ниже фрагменте кода.

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++ 
 
    }}