我想提示用户输入,如果输入的有效输入不是有效选项,则重新提示。
现在,无论输入是否正确,它总是会重新提出,无论是否正确。
以下是代码:
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循环?也许运营商错了? 没有找到任何有用的东西,任何帮助表示赞赏!
答案 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.时,数组可能更智能。
ON_COMMAND_RANGE(ID_COMMAND, ID_COMMAND, Handler)
&#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 Set:new 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
该循环甚至不检查您可能拥有的其余条件,并退出循环。