简单的Javascript“或”声明?

时间:2013-12-05 02:42:29

标签: javascript

对于课堂作业,我们的任务是使用提示符()获取用户输入。我只希望提示接受3个值中的1个。

这是我的代码:

ounce = prompt ( "What size would you like your drink?\n8oz, 12oz, 16oz are the available sizes." );

    while ( ounce!= "8oz" || ounce != "12oz" || ounce != "16oz")
{
        alert ( "Please select a proper size: 8oz, 12oz, 16oz" );
        prompt ( "What size would you like your drink?\n8oz, 12oz, 16oz are the available sizes." );
}

我的意图是,当用户输入除了8盎司,12盎司或16盎司之外的其他任何东西时,它会告诉他们该大小不可用,并且他们会提示他们再次询问他们的大小,直到他们输入其中一个值。但是我现在的代码不起作用。即使我输入8oz它也说不正确并再次询问我的尺寸。我是初级水平课程的初学者,因为你可以告诉所以任何帮助都是值得赞赏的。

3 个答案:

答案 0 :(得分:2)

你需要使用AND条件......只有当输入的值不是三个中的一个时才需要进入循环,如果你使用OR那么即使你输入一个有效值,两个比较操作也会转如果你输入8oz,那么ounce != "12oz"ounce != "16oz"都将为真...因为OR操作将返回任何一个条件的真实结果是的,它将进入循环。

如果您使用AND条件,则仅当满足所有三个条件时才会执行循环,因此如果您输入有效值12oz,则条件ounce != "12oz"将返回false导致整体条件失败,从而退出循环。

ounce = prompt ( "What size would you like your drink?\n8oz, 12oz, 16oz are the available sizes." );

while ( ounce!= "8oz" && ounce != "12oz" && ounce != "16oz")
{
        alert ( "Please select a proper size: 8oz, 12oz, 16oz" );
        ounce  = prompt ( "What size would you like your drink?\n8oz, 12oz, 16oz are the available sizes." );
}

演示:Fiddle

答案 1 :(得分:0)

简单的答案是使用AND而不是OR,但我认为值得解释为什么会这样。

您在此处看到的是De Morgan's theorem的应用程序,其中声明:

!(A && B) === !A || !B

!(A || B) === !A && !B

所以,如果你这样做:

ounce!= "8oz" || ounce != "12oz" || ounce != "16oz"
你说的是:

! ( ounce == "8oz" && ounce == "12oz" && ounce == "16oz" )

这是永远不会的,因为ounce不能同时是“8oz”,“12oz”和“16oz”。

我认为你想要的是:

! ( ounce == "8oz" || ounce == "12oz" || ounce == "16oz" )

当我们应用De Morgan的转型时,我们得到:

ounce != "8oz" && ounce != "12oz" && ounce != "16oz"

答案 2 :(得分:0)

作为旁注,这是一个完美的情况。

var ounce = undefined;

do {
    alert("Please select a proper size: 8oz, 12oz, 16oz");
    ounce = prompt("What size would you like your drink?\n8oz, 12oz, 16oz are the available sizes.");
} while ( ounce != "8oz" && ounce != "12oz" && ounce != "16oz");