2014-04-16 53 views
1

我有如果我Main.js文件else語句如下:爲什麼我的if else語句返回不正確的結果?

var fixA = "Trap"; 
var fixB = "Ball"; 

console.log(fixA); 
console.log(fixB); 

if (fixA == "Mouse" || fixA == "Ball" && fixB == "Mouse" || fixB == "Ball") { 
    console.log("Ball hit mouse"); 
}else if (
    fixA == "Trap" || fixA == "Ball" && fixB == "Trap" || fixB == "Ball") { 
    console.log("Ball hit trap"); 
}else if (
    fixA == "Trap" || fixA == "Mouse" && fixB == "Trap" || fixB == "Mouse") { 
    console.log("Trap hit mouse"); 
} 

我在原來的語句fixAfixB變量是基於與對方,這沒有奏效碰撞的對象分配。它繼續顯示「球命中鼠標」,if()的結果。

自己尋找問題我給了fixAfixB一個固定的字符串,這又導致了相同的輸出。即使我的前兩個控制檯日誌設置變量記錄正確的字符串之後。因此,陳述本身必定有問題。我做了一些閱讀,研究等,但我似乎無法弄清楚它有什麼問題。

有人能幫助我嗎?

+4

總結括號內的或的。 –

+0

它不起作用?除了「球擊鼠標」,你還期望什麼? – Bergi

+1

並非所有的運營商都是平等的 –

回答

4

查看JavaScript的operator precendece&&運算符的結合強度大於||運算符。您可以通過在您的條件中添加禁忌來規避這種行爲。

if ((fixA == "Mouse" || fixA == "Ball") && (fixB == "Mouse" || fixB == "Ball")) { 
    console.log("Ball hit mouse"); 
}else if (
    (fixA == "Trap" || fixA == "Ball") && (fixB == "Trap" || fixB == "Ball")) { 
    console.log("Ball hit trap"); 
}else if (
    (fixA == "Trap" || fixA == "Mouse") && (fixB == "Trap" || fixB == "Mouse")) { 
    console.log("Trap hit mouse"); 
} 
+0

這兩個答案幫了我很多,thnx傢伙! – Tomjesch

4

2級錯誤在這裏。一個是運算符優先級:

// your code 
fixA == "Mouse" || fixA == "Ball" && fixB == "Mouse" || fixB == "Ball" 
// how it works 
(fixA == "Mouse") || ((fixA == "Ball" && fixB == "Mouse") || (fixB == "Ball")) 
// what I assume you wanted 
(fixA == "Mouse" || fixA == "Ball") && (fixB == "Mouse" || fixB == "Ball") 

但是,這仍是不正確的,因爲它也將觸發鼠標鼠標或球球,而不僅僅是鼠標球。

你會需要像一個條件:

(fixA == "Mouse" && fixB == "Ball") || (fixA == "Ball" && fixB == "Mouse") 
+3

+1。你剛給我節省了時間來寫這個答案我自己:-) – Bergi

+0

這兩個答案幫了我很多,thnx傢伙! – Tomjesch

相關問題