2013-04-21 51 views
0

下面的代码代表了我试图实现的想法,但是当我测试它不起作用时,测试q1和q2是否等于true的适当方法是什么?在条件测试多个变量? Dom Javascript

function processForm() { 
    if(q1_valid = true && q2_valid = true){ 
    alert("yes"); 
    } else { 
    alert("no"); 
    } 
} 
+0

您需要使用'=='(或'===')进行测试。 '='是赋值。 – Alxandr 2013-04-21 04:12:28

+0

如果测试一个你知道的变量是'true'或者'false',你可以完全省略'== true'部分,只是说'if(q1_valid && q2_valid)'。 – nnnnnn 2013-04-21 04:17:18

回答

1

当您使用的JavaScript简单=(和大多数类似C语言),什么情况是,您所分配的变量,然后返回所述分配的结果。例如,代码a = b = true。这可以分成a = (b = true)。现在,如果我们只查看括号内的部分,就会发现它所做的是首先将b设置为true,然后返回b。然后,在括号之外,它将a设置为任何b(因为是true),并返回a的值。 a的价值无处可去,所以简单地放弃了。

现在,如果我们回到你如果测试,你最终得到的是基本上是这样的:

  1. 设置q1_validtrue
  2. 返回true(q1_valid的值)到&&运算符。
  3. true适用于&&所以它看起来在右侧。
  4. q2_valid设置为true
  5. 返回true&&
  6. &&现在双方都有true。退货true

测试总是通过。运行测试后,q1_validq2_valid将始终为true

简单的解决办法是用任一==(等于),以取代====(类型值等于)。你如果检查应该像下列之一:

1.

if(q1_valid == true && q2_valid == true) 

2.

if(q1_valid === true && q2_valid === true) 

而且,由于与布尔的工作(这是真或假值), altogheter可以省略等于真的检查。另一种方法是这样的:

if(q1_valid && q2_valid) 
+0

非常感谢你,这是一个非常清晰,深思熟虑的答案。我重视你的贡献,这绝对有帮助! – iplayjumanji2 2013-04-21 04:33:45

+0

很高兴听到。另外,你应该在javascript中查找'=='和'==='之间的区别。否则'null == undefined'和'0 == null'这个事实可能会让你感到震惊。 – Alxandr 2013-04-21 04:36:08

0

两个问题在这里:

您需要使用两个等号比较==

变数不会在功能存在,你就需要调用时它们作为参数传递功能

function processForm(q1_valid, q2_valid) { 
    if(q1_valid == true && q2_valid == true){ 
    alert("yes"); 
    } else { 
    alert("no"); 
    } 
} 
+0

你显然没有使用单个'=',尽管double或者triple等于可以解决这个问题。请注意,变量可能会在作用域链的更上方定义(直到并包括全局变量),因此它们不需要是参数。 – nnnnnn 2013-04-21 04:18:17