2015-02-24 21 views
1
var choice1 = prompt("Enter choice 1"); 
var choice2 = prompt("Enter choice 2"); 

if (choice1 === "x" && choice2 === ("a" || "b" || "c")) { 
    alert("Good job!"); 
} 

假設用戶輸入xchoice1c可供選擇2.Javascript邏輯運算符:多個||語法困境

以上是一個簡單的例子來突出我的問題。我知道這不起作用,但我的問題是爲什麼? Javascript不會比較()中的多個||陳述與choice2。爲什麼不?我腦海中的邏輯是choice2是與"a""b""c"相同的類型和值(===)。

我得到它的工作方式是這樣的:

(choice1 === "x" && ((choice2 === "a") || (choice2 === "b") || (choice3 === "c"));

請幫我爲什麼使用多個||的時候明白了,你需要明確地寫出每||方案,而不是把一堆內()當我嘗試了頂部。謝謝。

回答

4

它只是不這樣工作,你不能比較一個值與使用OR的多個其他值,你必須單獨比較每個值。

你會使用Array.indexOf

if (['a', 'b', 'c'].indexOf(choice2) != -1) 

它不工作的原因是得到最接近因爲OR和AND檢查一個truthy值,所以在

('a' || 'b' || 'c') // return "a" 

a是一個真值,所以OR從來沒有進展,它不必,它已經有一個真值,所以表達式是真實的,你剩下的a,其餘的被丟棄

0

在JavaScript中,如果你這樣做

var a = null; 
var b = {}; 
var c = "haha" 

var d = a || b || c; 

d值將是bvar1 || var2 || var3類型的表達式返回值爲第一個not nullnot undefined的值。

所以,在你的情況下,choice2 === ("a" || "b" || "c")就像寫作choice2 === "a"一樣。

0

(object || object)語法類似於null檢查運算符不是用於JavaScript中的條件檢查。

所以

  1. console.log(null || "b")將登錄b

  2. console.log(undefined || "b")將登錄b

  3. console.log(("a" || "b"))會記錄一個

console.log(null || "b") 
 
console.log(undefined || "b") 
 
console.log(("a" || "b"))

你condintion(下)將只工作,如果選擇2是 「a」 和選擇1爲 「x」。

if (choice1 === "x" && choice2 === ("a" || "b" || "c")) { 
    alert("Good job!"); 
} 
0

什麼是括號會首先檢查結果,因此("a" || "b" || "c")將評估爲「A」,因爲你正在有效地說是在回報「A」或「B」或「C」,所以它會返回「一」,因爲那是第一。

我相信你期望的是("a" || "b" || "c")來進行某種設置操作,但JavaScript沒有這個功能,所以如果用戶選擇"a",你的代碼choice2 === ("a" || "b" || "c")將永遠是真的。將多個值與choice2進行比較的最佳方法是將「a」,「b」和「c」存儲在數組中,並查看choice2是否存在於其中。 ["a","b","c"].indexOf(choice2) != -1

在大多數語言中,您甚至無法比較三個字符串,但JavaScript盡其所能不會拋出異常,因此它不會導致網站用戶意識到頁面存在問題,因此它將嘗試和比較三個字符串,因爲您會比較三個布爾值,但不返回一個布爾值,而是返回一個字符串。我會完全避免這種語法,因爲它會混淆大多數不熟悉JavaScript奇怪方式的開發人員。