以下のコードは、私が達成しようとしているアイデアを表していますが、テストするとうまくいかない場合、q1 と q2 が true に等しいかどうかをテストする適切な方法は何でしょうか?
function processForm() {
if(q1_valid = true && q2_valid = true){
alert("yes");
} else {
alert("no");
}
}
以下のコードは、私が達成しようとしているアイデアを表していますが、テストするとうまくいかない場合、q1 と q2 が true に等しいかどうかをテストする適切な方法は何でしょうか?
function processForm() {
if(q1_valid = true && q2_valid = true){
alert("yes");
} else {
alert("no");
}
}
javascript (およびほとんどの C に似た言語) でsimple を使用する=
と、変数を割り当ててから、その割り当ての結果を返すことになります。
たとえば、コードを取りますa = b = true
。これは に分割できますa = (b = true)
。ここで、括弧内の部分だけを見ると、最初に b を true に設定し、次に b を返すことがわかります。次に、括弧の外側で、a を b が何であれ (なぜなら が原因であるtrue
) に設定し、a の値を返します。a の値は行き場がないので、単純に削除されます。
if-test に戻ると、最終的には次のようになります。
q1_valid
しtrue
ます。true
(q1_valid の値) をオペレーターに返し&&
ます。true
は有効な&&
ので、右側に見えます。q2_valid
しtrue
ます。true
ます&&
。&&
今はtrue
両側にあります。を返しますtrue
。テストは常にパスします。q1_valid
そしてq2_valid
常にtrue
テストが実行された後になります。
簡単な解決策は、 (equals) または(type and value equals)=
のいずれかに置き換えることです。if-check は次のいずれかのようになります。==
===
1.
if(q1_valid == true && q2_valid == true)
2.
if(q1_valid === true && q2_valid === true)
また、ブール値 (true または false のいずれかの値) を使用するため、true と等しいかどうかのチェックを完全に省略できます。これを行う別の方法は、次のようになります。
if(q1_valid && q2_valid)
ここに 2 つの問題があります。
比較には 2 つの等号を使用する必要があります==
変数は関数に存在しません。関数を呼び出すときにパラメーターとして渡す必要があります。
function processForm(q1_valid, q2_valid) {
if(q1_valid == true && q2_valid == true){
alert("yes");
} else {
alert("no");
}
}