0

以下のコードは、私が達成しようとしているアイデアを表していますが、テストするとうまくいかない場合、q1 と q2 が true に等しいかどうかをテストする適切な方法は何でしょうか?

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

2 に答える 2

1

javascript (およびほとんどの C に似た言語) でsimple を使用する=と、変数を割り当ててから、その割り当ての結果を返すことになります。

たとえば、コードを取りますa = b = true。これは に分割できますa = (b = true)。ここで、括弧内の部分だけを見ると、最初に b を true に設定し、次に b を返すことがわかります。次に、括弧の外側で、a を b が何であれ (なぜなら が原因であるtrue) に設定し、a の値を返します。a の値は行き場がないので、単純に削除されます。

if-test に戻ると、最終的には次のようになります。

  1. に設定q1_validtrueます。
  2. true(q1_valid の値) をオペレーターに返し&&ます。
  3. trueは有効な&&ので、右側に見えます。
  4. に設定q2_validtrueます。
  5. に戻りtrueます&&
  6. &&今は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)
于 2013-04-21T04:18:45.927 に答える
0

ここに 2 つの問題があります。

比較には 2 つの等号を使用する必要があります==

変数は関数に存在しません。関数を呼び出すときにパラメーターとして渡す必要があります。

function processForm(q1_valid, q2_valid) {
  if(q1_valid == true && q2_valid == true){
    alert("yes");
    } else {
    alert("no");
  }
}
于 2013-04-21T04:15:45.943 に答える