Javascript怪异如果声明不起作用

时间:2012-11-26 11:53:11

标签: javascript

我自己是IF状态,

tempNum2 = 4, tempNum2 = 3

answer1 = 1, answer2 = 3, answer3 = 2, answer4 = 4

if( (tempNum2== answer2 || tempNum1== answer2) &&
    (tempNum2!= answer1 || tempNum1!= answer1) &&
    (tempNum2!= answer4 || tempNum1!= answer4) &&
    (tempNum2!= answer3 || tempNum1!= answer3) &&
    (asnwer5 == 0))
 {
     console.log("Correct");
 }

现在查看if语句,tempNum2等于answer4,但在我的firefox控制台中,它打印出Correct,查看if语句,它应该失败。因为tempNum2是4,而answer4 = 4,所以这个if语句应该失败,这个语句出了什么问题?不要担心别的什么,我敢肯定我有这个if语句错了。

帆布

5 个答案:

答案 0 :(得分:2)

你必须拥有所有4个或子句中的一个,因为你正在使用a和无处不在。另外我不知道答案5是什么,所以我不能说,但它也应该是真的,但它是定义的。如果您将&&更改为||,它可能会有效,但我不知道您尝试使用的是什么逻辑。

(false || false)&&
(true || true)&&
(true || false)&&
(true|| true)

false && true && true && true

我不知道你想要什么逻辑,但是你的代码完全按照你所说的去做。事实上:

(tempNum2== answer2 || tempNum1== answer2)

因此,除非tempNum2= tempNum1= answer2,否则此逻辑将始终返回false。

答案 1 :(得分:1)

tempnum2!= answer4 || tempNum1!=answer4总是如此,因为1.)tempnum2是3(第一行)和2.)tempNum1未定义。确保你的第一行是正确的;)。

/ E:您的代码中存在严重的拼写错误。你应该纠正它们。

  • 您定义了两次tempNum2。你的意思是tempNum1和tempNum2吗?
  • 您已撰写(asnwer5 == 0)。你的意思是(answer5 == 0)

答案 2 :(得分:0)

2º条件如果tempNum2为4且answer4 = 4

   (tempNum2!= answer4 || tempNum1!= answer4)

此返回 true ,因为tempNum1!= answer4(3!= 4)。

让我们分析一下条件:

1º条件:

   (tempNum2== answer2 || tempNum1== answer2)

返回 true ,因为tempNum1== answer2为真(3 == 3)

3º条件:

   (tempNum2!= answer4 || tempNum1!= answer4)

返回true,因为tempNum1!= answer4为真(3!= 4)

4º条件:

   (tempNum2!= answer3 || tempNum1!= answer3)

返回 true 因为(tempNum2!= answer3)为真(4!= 2)。

如果asnwer5 = 0这个(asnwer5 == 0)将是真的,就像其他条件一样。

我认为你犯了一个错误,tempNum2 = 4, tempNum2 = 3你的意思是tempNum2 = 4, tempNum1 = 3。因为根据您的文字tempNum2 is equal to answer4

答案 3 :(得分:0)

我猜你想在第一行写 tempNum1 = 4 ..

tempNum1 = 4,tempNum2 = 3

所以代码:

tempNum1 = 4, tempNum2 = 3

answer1 = 1, answer2 = 3, answer3 = 2, answer4 = 4

if( (tempNum2== answer2 || tempNum1== answer2) &&
    (tempNum2!= answer1 || tempNum1!= answer1) &&
    (tempNum2!= answer4 || tempNum1!= answer4) &&
    (tempNum2!= answer3 || tempNum1!= answer3) &&
    (asnwer5 == 0))
 {
     console.log("Correct");
 }

答案 4 :(得分:0)

(tempNum2!= answer4 || tempNum1!= answer4) &&

这仍然是真实的,因为大概是tempNum1未定义 - 因此不等于回答4.

记住逻辑运算符之间的差异!如果只满足一个条件,将返回true;在你的例子中,如果没有定义某些变量,总是会满意 - 无论如何都要考虑到不平等测试。

使用像这样的if()语句的整体结构还有很多不足之处。它比任何东西都更能影响可读性。 我会认真考虑重构您的代码。保持这样不会很有趣,也不会调试很少的错误 - 就像你刚刚经历的那样。

相关问题