#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>