下面的代碼代表了我試圖實現的想法,但是當我測試它不起作用時,測試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