спросите у пользователя его имя

#javascript #loops #if-statement #while-loop

#javascript #циклы #if-оператор #цикл while

Вопрос:

Я только начал изучать javascript и после изучения циклов, и если бы я еще хотел написать небольшую программу, которая запрашивает у пользователя его имя, и оно пустое или его число, оно будет продолжать запрашивать пользователя, пока это не будет действительное имя. Сначала, если я напишу строку, она будет записана в html, но когда программа пытается запустить цикл, она не сможет записать действительное имя.

 var getName = prompt("What is your name? ");


if (getName === null || !isNaN(getName)){

    while (getName !== null || isNaN(getName)){
        alert("Invalid name, please try again");
        getName = prompt("What is your name ? ");
       if (getName !== null || isNaN(getName)){
           document.write("Hello ", getName);
       }
    }
}else {
    document.write("Hello ", getName);
}  

Почему мой код не работает после входа в цикл и после ввода действительной вещи программа все еще говорит «это недопустимое имя, попробуйте еще раз»?

Комментарии:

1. он не работает после ввода недопустимого имени. он застрял в недопустимом цикле имен

2. Ваш цикл while использует неправильное условие. Вы НЕ хотите, чтобы это продолжалось, если у вас есть действительное имя. Попробуйте !(getName !== null || isNaN(getName))

Ответ №1:

Вместо этого вы могли бы использовать условие getName === null || !isNaN(getName) , проверьте следующий пример.

Надеюсь, это поможет.

 var getName = null;

while (getName === null || !isNaN(getName)){
  getName = prompt("What is your name ? ");

  if (getName === null || !isNaN(getName)){
    alert("Invalid name, please try again");
  }else{
    document.write("Hello ", getName);
  }
}  

Комментарии:

1. сначала я делал что-то подобное, но и это я испортил. его работы. это действительно разочаровывает меня. я должен прочитать больше … В любом случае, спасибо…

Ответ №2:

Это то, что вы ищете?

 var getName = prompt("What is your name ? ");


if (getName === null || !isNaN(getName)){
    while (getName !== null || isNaN(getName)){
        alert("Invalid name, please try again");
        getName = prompt("What is your name ? ");
        console.log(getName)
       if (getName !== null || !isNaN(getName)){
           document.write("Hello ", getName);
           break;
       }
    }
}else {
    document.write("Hello ", getName);
}
  

Вот ссылка на JSFiddleLink

Ответ №3:

 while (getName !== null || isNaN(getName)){
  alert("Invalid name, please try again");
  getName = prompt("What is your name ? ");
  if (getName !== null || isNaN(getName)){
     document.write("Hello ", getName);
  }
}
  

Давайте сравним условия для вашего цикла while и для вашего оператора if, обратите внимание, что они точно такие же.

Допустим, условия оцениваются как true, так что у вас есть

 while(true) {
  // do something
  if (true){
     // do something
  }
}
  

Итак, выполняется цикл, и выполняется оператор if, но вы ничего не сделали для выхода из цикла.

В этом случае вы хотите, чтобы условие цикла while было истинным, в то время как оператор if имеет значение false, и наоборот, поэтому сделайте

 while(!(getName !== null || isNaN(getName)))
  

Ответ №4:

Возможно, это не то, что вы ищете, но вот рекурсивная функция для выполнения того, что вы ищете. Немного более чистая и простая логика.

 function ask(){

name = prompt("What is your name?");
  
    if(name != null amp;amp; isNaN(name) amp; name != ""){
  	    document.write("Hello ", name);
    }else{
      alert("Invalid name, please try again")
      ask();
    }
}

ask();  
 <!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<title>test</title>
	<script type="text/javascript " src="script.js"></script>
</head>
<body>



</body>
</html>