下面的代码代表了我试图实现的想法,但是当我测试它不起作用时,测试q1和q2是否等于true的适当方法是什么?在条件测试多个变量? Dom Javascript
function processForm() {
if(q1_valid = true && q2_valid = true){
alert("yes");
} else {
alert("no");
}
}
下面的代码代表了我试图实现的想法,但是当我测试它不起作用时,测试q1和q2是否等于true的适当方法是什么?在条件测试多个变量? Dom Javascript
function processForm() {
if(q1_valid = true && q2_valid = true){
alert("yes");
} else {
alert("no");
}
}
当您使用的JavaScript简单=
(和大多数类似C语言),什么情况是,您所分配的变量,然后返回所述分配的结果。例如,代码a = b = true
。这可以分成a = (b = true)
。现在,如果我们只查看括号内的部分,就会发现它所做的是首先将b设置为true,然后返回b。然后,在括号之外,它将a设置为任何b(因为是true
),并返回a的值。 a的价值无处可去,所以简单地放弃了。
现在,如果我们回到你如果测试,你最终得到的是基本上是这样的:
q1_valid
到true
。true
(q1_valid的值)到&&
运算符。true
适用于&&
所以它看起来在右侧。q2_valid
设置为true
。true
至&&
。&&
现在双方都有true
。退货true
。测试总是通过。运行测试后,q1_valid
和q2_valid
将始终为true
。
简单的解决办法是用任一==
(等于),以取代=
或===
(类型和值等于)。你如果检查应该像下列之一:
1.
if(q1_valid == true && q2_valid == true)
2.
if(q1_valid === true && q2_valid === true)
而且,由于与布尔的工作(这是真或假值), altogheter可以省略等于真的检查。另一种方法是这样的:
if(q1_valid && q2_valid)
非常感谢你,这是一个非常清晰,深思熟虑的答案。我重视你的贡献,这绝对有帮助! – iplayjumanji2 2013-04-21 04:33:45
很高兴听到。另外,你应该在javascript中查找'=='和'==='之间的区别。否则'null == undefined'和'0 == null'这个事实可能会让你感到震惊。 – Alxandr 2013-04-21 04:36:08
两个问题在这里:
您需要使用两个等号比较==
变数不会在功能存在,你就需要调用时它们作为参数传递功能
function processForm(q1_valid, q2_valid) {
if(q1_valid == true && q2_valid == true){
alert("yes");
} else {
alert("no");
}
}
你显然没有使用单个'=',尽管double或者triple等于可以解决这个问题。请注意,变量可能会在作用域链的更上方定义(直到并包括全局变量),因此它们不需要是参数。 – nnnnnn 2013-04-21 04:18:17
您需要使用'=='(或'===')进行测试。 '='是赋值。 – Alxandr 2013-04-21 04:12:28
如果测试一个你知道的变量是'true'或者'false',你可以完全省略'== true'部分,只是说'if(q1_valid && q2_valid)'。 – nnnnnn 2013-04-21 04:17:18