2013-04-21 52 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