while循环中的多个条件 - Javascript

时间:2016-01-04 21:31:48

标签: javascript while-loop

我想提示用户输入,如果输入的有效输入不是有效选项,则重新提示。

现在,无论输入是否正确,它总是会重新提出,无论是否正确。

以下是代码:

var userChoice = prompt("Do you choose rock, paper, scissors or rope?");
while (userChoice != "rock" || "paper" || "scissors" || "rope") {
    userChoice = prompt("Sorry invalid input, please enter either: rock, paper,scissors, or rope.");
}

似乎应该是一件简单的事情,我是否误解了如何使用while循环?也许运营商错了? 没有找到任何有用的东西,任何帮助表示赞赏!

6 个答案:

答案 0 :(得分:3)

语法while ((userChoice != "rock") || "paper" || "scissors" || "rope") { //... } 是有效的,但OR将比等式检查更晚结束,所以基本上你写了:

"paper"

现在,既然你使用了这样的,那么你基本上都要进行有效性检查,至少&&是有效的。但是,您可以使用显式检查并使用||运算符代替while (userChoice !== "rock" && userChoice !== "paper" && userChoice !== "scissors" && userChoice !== "rope") { //... } 来获取您的目标行为:

global $count;

答案 1 :(得分:3)

您还可以使用数组和indexOf

$(function() {
  $(document).on('DOMNodeInserted DOMNodeRemoved', '.tag-wrapper', function(e) {
    $('#p').text('tag-wrapper width: ' + $('.tag-wrapper').outerWidth() + 'tag-scroller width: ' + $('.tag-scroller').outerWidth());
    if ($('.tag-wrapper').outerWidth() > $('.tag-scroller').outerWidth()) {
      alert('ok');
    }
  });
  $('#btn').click(function(e) {
    $('.tag-wrapper').append($('<div class="tag">1</div>'));
  });
  $('#btnWidth').click(function(e) {
    $('#p').text('tag-wrapper width: ' + $('.tag-wrapper').outerWidth() + 'tag-scroller width: ' + $('.tag-scroller').outerWidth());
  });
});

答案 2 :(得分:2)

虽然userChoice不等于任何选择...所以AND

while (userChoice != "rock" && userChoice != "paper" && userChoice != "scissors" && userChoice != "rope") {

答案 3 :(得分:2)

使用Here's a fiddle.时,数组可能更智能。

&#13;
&#13;
ON_COMMAND_RANGE(ID_COMMAND, ID_COMMAND, Handler)
&#13;
&#13;
&#13;

答案 4 :(得分:2)

对于更复杂的规则(例如忽略区分大小写),可以使用正则表达式,例如match

while( ! userChoice.match(/^\s*(?:rock|paper|scissors|rope)\s*$/i)) { ... }

(参见https://regex101.com/r/sV3tJ1/1#javascript上的正则表达式的解释)

注意:感谢Willem Van Onsem建议正则表达式

也可以使用对象文字:

var validChoices = {rock: true,
                    paper: true,
                    scissors: true,
                    rope: true},
    userChoice = ...
while ( ! validChoices.hasOwnProperty(userChoice)) {
  ...
}
截至2016年的最新浏览器

ES6 Setnew Set(["rock", "paper", ...])

答案 5 :(得分:0)

我将尝试一个更通用的答案:

运行while循环时括号中的内容为TRUE

||的工作方式,如果至少一个操作数TRUE,它将评估为TRUE

所以就您而言,即使您选择

userChoice = "rock";
userChoice != "rock" => FALSE

||之后的所有内容仍将评估为TRUE,因为

"rock" != "paper" => TRUE 

,因此您放在方括号中的整个情况的评估结果为TRUE

因此,为了打破循环,您需要将方括号中的条件评估为FALSE

&&的工作方式,如果至少一个操作数的值为FALSE,则它将计算为FALSE

还有

userChoice = "rock";
userChoice != "rock" => FALSE

该循环甚至不检查您可能拥有的其余条件,并退出循环。