2

我对 JavaScript 非常陌生,并尝试使用 lynda.com 进行学习。

我目前正在玩 if 语句。

有问题的代码:

var value = prompt("1 or 2?");

if ( value == 1 ) {
    alert("You have chosen 1.");
} 

if ( value == 2 ) {
    alert("You have chosen 2.");
}   

if ( value != (1 || 2) ) {
    alert("Invalid number. Try again.");
}

这就是我想要发生的事情:如果数字不是 1 或 2,我希望 JS 执行这段代码:

 if ( value != (1 || 2) ) {
    alert("Invalid number. Try again.");
}

显然这不是写出来的正确方法,我已经尝试过很多不同的方法。有人可以告诉我正确的方法,可能使用 else 语句吗?

4

11 回答 11

4
if ( value != 1 && value != 2) {
    alert("Invalid number. Try again.");
}

如果你写value != (1||2)(1||2)将首先被评估为1然后与 比较value,所以你有效地写了:

if ( value != 1 ) { [...] }.

这是因为 的()优先级高于!=。您还可以阅读有关运算符优先级的说明,其中提供了更多详细信息。

于 2013-08-15T13:10:55.767 回答
3

1

if ( value != 1 && value !=2 ) {
    alert("Invalid number. Try again.");
}

2

 if ( !(value == 1 || value ==2) ) {
    alert("Invalid number. Try again.");
}

3

if ( value == 1 ) {
    alert("You have chosen 1.");
} 
else if ( value == 2 ) {
    alert("You have chosen 2.");
}   
else {
    alert("Invalid number. Try again.");
}
于 2013-08-15T13:13:17.497 回答
2

编写此语句的最佳方法如下:

if ( value == 1 )
{
  alert("1");
}
else if ( value == 2 )
{
  alert("2");
}
else
{
  alert("no 1 or 2");
}

你搞砸的 if 语句是 (1 || 2) 会发生什么,它将进行布尔测试并返回 1。它应该看起来像这样

if ( value !== 1 && value !== 2 )
{
  alert("no 1 or 2");
}

谢谢

于 2013-08-15T13:14:59.643 回答
2

如前所述,最好的方法是分成两个 NOT 语句,并评估两者:

if ( value != 1 && value != 2) ) {
    alert("Invalid number. Try again.");
}

但是,您也可以使用if, else if,else模式来保护自己免受所有其他输入(字母、标点符号、空格等)的影响。最后else作为一个包罗万象:

var value = prompt("1 or 2?");

if ( value == 1 ) {
    alert("You have chosen 1.");
} 

else if ( value == 2 ) {
    alert("You have chosen 2.");
}   

else {
    alert("Invalid number. Try again.");
}
于 2013-08-15T13:16:53.367 回答
1

像这样的内联语句:如果左边是 false-y (1 || 2),则只计算右边的值。||所以你的陈述实际上是在说:

if ( value != 1 )

因为1评估为真。

正如大多数其他人指出的那样,您真正想要做的是:

if ( value != 1 && value != 2 )
于 2013-08-15T13:13:09.763 回答
1

逻辑不正确。你必须这样做

if ( value != 1 && value != 2) ) {
    alert("Invalid number. Try again.");
}

(1||2)语句被评估为1因此您正在测试是否value != 1

于 2013-08-15T13:14:29.270 回答
1

试过写

if(value != 1 && value != 2)
于 2013-08-15T13:11:17.347 回答
0

你的问题在这里:

if ( value != (1 || 2) )

ths 所做的是检查“值”是否不等于 (1 OR 2),其中首先评估 (1 OR 2),因为它在括号中。(1 OR 2) 计算结果为 1,因为 1 在 javascript 中是真值。您的代码实际上在做的是检查您的值是否不等于 1。

您真正想要做的是检查您的值是否为 !=1 并且您的值是否为 !=2。你这样做:

if (value !=1 && value !=2) { /* do something */ }
于 2013-08-15T13:14:16.170 回答
0

你必须这样做

if ( value != 1 && value != 2 ) {
    alert("Invalid number. Try again.");
}

或者

if (!(value == 1 || value == 2)) {
    alert("Invalid number. Try again.");
}
于 2013-08-15T13:11:18.973 回答
0

您可以按如下方式使用开关

switch(value) {
  case 1:
    alert("You have chosen 1.");
    break;
  case 2:
    alert("You have chosen 2.");
    break;
  default:
    alert("Invalid number. Try again.");
}
于 2013-08-15T13:21:00.533 回答
-1

你不需要一个子句。您可以使用:

else{
}
于 2013-08-15T13:18:59.757 回答